OOP设计:在哪里放置对象特定的“比较”方法?
-
28-09-2019 - |
题
我有一些测量对象实例来自存储在测试收集对象中的一系列测试运行。我也有一些逻辑可以比较两个测试结果对象实例,并告诉我它们是否“足够接近”。
这个逻辑应该放在哪里?
- 在对象上作为方法?像:
instance.approximately_equal(other)
- 在对象类上作为类/静态方法?
class.approximately_equal(a,b)
- 在收集对象作为方法上?
collection.approximately_equal(a,b)
正确的OO设计是什么?
(我问,尽管#1似乎是正确的解决方案,但我永远不会问一个实例是否与另一个实例大致相等。只有当“某些对象”彼此相等时,只有一个实例。这让我思考。 ..)
谢谢
解决方案
我读过的面向对象的设计书建议将跨类功能放入服务提供商对象。这将使这两个对象解散并降低复杂性,但是如果您的项目很小,则可能会过大。
其他提示
我将使用选项1(实例方法),因为这使您能够完善派生类中的比较逻辑(如果需要)。
我发现#3是最小的,并且导致肿的代码较少,因为它倾向于迫使您使这些方法尽可能灵活/可重复使用。例如,在C ++中,您可能只使用操作员过载来处理它。如果您有一个实用程序类(或者,如果您打算扩展本机数据类型),则净效果是相同的,只是带有不同的演示文稿。
不隶属于 StackOverflow