代码之家  ›  专栏  ›  技术社区  ›  bcosca

OOP:什么时候创建一个基类,什么时候不创建?

  •  2
  • bcosca  · 技术社区  · 14 年前

    我有一个大班级,有很多方法(25种,当然是相互关联的)。我不确定是否应该将其拆分,然后创建一个派生类和基类。我看不到将来有任何机会继承另一个类。那么,将一个大类分解成小部分的驱动因素是什么呢?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Manfred    14 年前

    是的,用20多种方法,把它分解。

    有时需要实验。

    另一种选择是研究如何减少方法的数量。例如,是否有相同的方法(按名称)使用不同数量和/或类型的参数?在这种情况下,您可能会看到这些签名之间的共性。这就引出了另一个建议。

    如果你有一个方法需要4个以上的参数,那么看看它们,也许有一个选项可以把它们自己变成一个类。这可能导致一些功能移到新类中。

    查看类中的字段数(=成员变量)。你能将这些方法分组,使它们在很大程度上操作这些成员变量的子集吗?也许您可以将这些方法及其操作的值转换为一个新类。

        2
  •  1
  •   thomasrutter    14 年前

    把一个大类分成小部分的驱动因素是什么?

    如果按照不同的对象来做是合乎逻辑的,那么您应该这样做。如果您定义的所有方法都是在单个对象上操作的,并且逻辑上不能被认为是与不同对象相关的,那么就将它们放在一个对象中。

    我不确定我应该把它拆分成派生类和基类

    不知道你的意思。当您需要一个从基类继承某些行为但修改或添加其他行为的对象,但又希望您的基类保持原样时,可以从基类派生。您不只是为了将代码分解成可管理的块而继承代码。

        3
  •  1
  •   Mike Sherov    14 年前

    “大班”是经典的“代码味”。请参见这里: http://sourcemaking.com/refactoring/large-class

    当你有一个大班级的时候, 可能或不可能 意味着您有一个很好的重构候选人。这就是“代码气味”的含义…也许你的代码是好的,但是只有仔细观察它你才能确定。

    遵循我链接的文章中给出的建议。即使认为它不是为PHP编写的,概念和策略仍然适用。