我什么时候将逻辑放在一个类中,而不是将类传递给实用程序类?

时间:2010-11-23 17:30:27

标签: oop

当我有一系列本质上相似但在稍微不同类型的对象上工作的进程时,我是否在单个实用程序类中统一工作类型,或者我是否将功能直接放在需要的每个对象上利用这个功能?

我并不关心具体的案例本身,但我对这个决定中的哪些因素感到最好奇。

2 个答案:

答案 0 :(得分:1)

我认为这取决于对象的类祖先,每个对象之间逻辑的真正差异,以及未来可能需要在其他类别上执行此操作。

对我而言,如果您应用于多个类的功能大致相同,并且可以应用于未来的课程,那么实用程序类就是一个很好的方法。

如果另一方面功能不同,那么你最终会在实用程序类中使用一个大的switch / case语句来容纳不同的对象类型,你可能想在对象本身中实现它。

答案 1 :(得分:0)

您有两种解决问题的方法:一种是使用泛型编程(水平多态)或使用更传统的基于垂直层次结构的实现来攻击它。

您的决策必须基于各种数据类型之间共享的相似性类型。在我们可以定义可以以任何类型操作的完整且正交的合同的情况下,我们可以轻松地决定使用泛型。

例如,这是List,Dictionary和System.Collections.Generic名称空间下的所有类的情况,它最终取代了早期版本.NET的相应非泛型对应物。

另一方面,再次从.NET世界我们可以用作垂直层次结构的一个例子,UserControl类比派生自ContainerControl并作为其他控件的基础,使用其虚拟方法专门化它的行为......

在大多数情况下,虽然类层次结构的设计涉及很多判断调用,并不总是确定性地定义,因为它们更多地依赖于您作为开发人员的经验和才能,而不是可以应用于具体模型的具体模型董事会在各种可能的情况下......