我有一些存储在测试集合对象中的测试运行的测量对象实例。我也有一些逻辑可以比较两个测试结果对象实例,并告诉我它们是否“足够接近”。
这个逻辑应该放在哪里?
instance.approximately_equal(other)
class.approximately_equal(a,b)
collection.approximately_equal(a,b)
对此有什么正确的OO设计?
(我问,因为虽然#1似乎是正确的解决方案,但我永远不会问一个实例是否与另一个实例近似等同。只有当“某些对象组”彼此相等时才会出现。我在想......)
由于
答案 0 :(得分:1)
我会使用选项1(实例方法),因为这样可以优化派生类中的比较逻辑(如果需要)。
答案 1 :(得分:1)
我读过的面向对象设计书籍建议将跨类功能放入服务提供者对象中。这将解耦两个对象并降低复杂性,但如果您的项目很小,可能会过度。
答案 2 :(得分:0)
我发现#3是最不突兀的,导致代码不那么臃肿,因为它会迫使你使这些方法尽可能灵活/可重用。例如,在C ++中,您可能只是使用运算符重载来处理它;如果您有一个实用程序类(或者,如果您计划扩展本机数据类型),则净效果是相同的,只是使用不同的表示。