代码之家  ›  专栏  ›  技术社区  ›  Jordan Parmer

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

oop
  •  2
  • Jordan Parmer  · 技术社区  · 14 年前

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

    我并不关心具体的案件本身,但我最好奇的是这个决定中的因素是什么。

    2 回复  |  直到 14 年前
        1
  •  1
  •   n8wrl    14 年前

    我认为这取决于你的对象的类祖先,每个对象之间逻辑上的真正区别,以及将来可能需要在其他类上做这件事。

    在我看来,如果应用于多个类的功能基本相同,并且可以应用于将来的类,那么实用程序类是一个很好的方法。

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

        2
  •  0
  •   JohnP    14 年前

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

    您的决策必须基于各种数据类型之间共享的相似性类型。在这种情况下,我们可以定义一个完整的和正交的契约,可以在任何类型中操作,然后我们可以很容易地决定使用泛型。

    例如,列表、字典和System.Collections.Generic名称空间下的所有类的情况就是这样,这些类最终替换了.NET早期版本对应的非常规对应项。

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

    在大多数情况下,尽管类层次结构的设计涉及许多判断调用,但这些调用并不总是确定地定义,因为它们更多地依赖于作为开发人员的经验和才能,而不是在一个具体模型中,该模型可以在所有可能的情况下全面应用。…