【发布时间】:2012-01-05 09:56:51
【问题描述】:
我想知道设计删除对象的最佳方法,触发删除许多依赖对象。
这是一个例子。有一个雇主类。当雇主被删除时,它的所有工作、发票都会被删除。当一个作业被删除时,它的类别选择也会被删除。等等。因此,您可以看到删除 Employer 会触发更多对象的删除。问题是我必须将删除依赖对象所需的许多参数传递给 Employer 类中的 delete 方法。
这是一个简化的示例。想象一个 Main 类。当一个 Main 对象被删除时,对象 Dep1、Dep2 也必须被删除。删除 Dep1 时,也必须删除 Dep11。如果删除方法如下所示:Dep1.delete(arg1)、Dep2.delete(arg2)、Dep11.delete(arg3),那么 Main 上的删除方法必须如下所示:Main.delete(arg1, arg2, arg3) .你看?更多的对象依赖于 Main - 删除需要更多的参数。
我还必须指出,我对从数据库中删除感兴趣,即从其“业务逻辑”意义上的删除。我什至没有在 delete 方法中取消设置“已删除”的对象。
我考虑过哪些选项:
- 将删除所需的参数分组到一个单独的对象中。我只是不明白如何对所有这些论点进行分组。他们根本不属于一起。例如,如果需要 Invoice_searcher 和 Job_searcher - 为什么它们会放在一个对象中?那可能是什么物体?
- 将依赖对象的删除移出 Employer 类中的 delete 方法。在这种情况下,不显式调用子级的删除方法会使系统处于不一致的状态。我想避免这种情况。
【问题讨论】:
-
很抱歉没有回答您的问题,但 Udi Dahan 发表了一篇关于“删除”一词的优秀博客:udidahan.com/2009/09/01/dont-delete-just-dont
-
这是一个有趣的观点,但并不能解决我的问题,并且讨论“不删除”超出了这个问题的上下文。
-
删除依赖对象需要什么样的参数?
object.deleteYourself()似乎是一个相当简单的指令,不需要任何其他输入。 -
我的意思是,对象本身不应该拥有删除自己所需的所有信息吗?
-
就像,我在问题中写道,例如:employer.delete(job_searcher, invoice_searcher, ...)。换句话说,我必须传递检索依赖对象所需的对象(搜索器)。也可以传递一些缓存存储对象,以便从那里删除已删除的实体。
标签: oop