胶水或管理课程什么时候做得太多?


10

我倾向于建立集中的类来管理设计中的其他类。它本身并不存储所有内容,但是大多数数据请求将首先发送给“经理”。在寻找这个问题的答案时,我注意到术语“上帝对象”。可以理解,维基百科将其列为反模式。

合法的胶水类或模块之间的界限在哪里,该胶水类或模块从各处传递数据和消息,而该胶粘类或模块做得太多呢?

Answers:


15

很多人说诸如“一个班级永远都不能超过你的头脑”之类的事情。

但是,我刚刚参加了与一些非常出色的世界级程序员就此问题进行的讨论。我已经与一位Naked Objects家伙通了谈。据我们所知,有时会发生这种情况,而解决它的方法并不多。

但是,通常情况下,发生这种情况的一个类是一个域对象,它代表您域的基本元素-银行帐户,零售销售等。如果您发现它也发生在其他类上,则可能想考虑那个班级的责任。这是我的提示:

  • 如果将其称为“经理”,“助手”或“服务”,则可能太大。一旦真正确定了班级的职责,您就会发现委派其他职责更加容易。
  • 如果它被称为“控制器”,它应该负责控制一堆其他类之间的交互……什么也没有。
  • 如果它在不同的物理节点之间传递数据和消息,那么它要么应该处理将特定消息转换为序列化形式,要么要处理传输机制。例如,您可能有一类将银行交易转换为XML,另一类通过HTTP发送该XML。
  • 如果它在应用程序的不同模块之间传递事件,那么它应该负责告诉侦听器何时引发事件,而别无其他。

根据经验,如果太大,请查看是否可以将任何职责委派给另一个类,如果不能,则可以。


有用的具体指导方针的好答案。我倾向于为域对象创建这样的类,其中所有或几乎所有数据都代表域的某些方面,我希望能够将其视为一个单元。然后,我倾向于将实际职责委托给仅在大类内部实际实例化的类。因此,我非常接近这条线,并且在编写它时,我可能应该倾向于使各个类更小。
jprete 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.