【问题标题】:Partial classes or inheritance部分类或继承
【发布时间】:2014-03-18 09:55:37
【问题描述】:

我有一个神级,我们称它为Aphordite,它已经有 1000 行代码,我正在编写一个检查该类可行性的方法列表,它有 500 多行代码。

现在我不知道是否最好将这些方法放在类中(这将增长到 1500 多行),使用继承创建一个部分类(但我读到它是代码生成器的解决方案)或创建一个静态仅包含这些方法的类。

考虑到这些方法只会被Aphrodite 调用,最好的解决方案是什么?

【问题讨论】:

  • Partial 类和继承都不是为了做你想做的事。您需要具体给出您的问题以获得更好的答案。
  • 如果我不得不猜测枪口,我会说这正是部分课程的目的,但 99% 是“修复”症状,而不是原因。我同意需要更多细节。
  • 部分类纯粹是组织性的,而听起来你的问题是一个需要重构的上帝类。
  • “检查可行性”太模糊了。类需要有凝聚力的职责,因此请尝试提出主题来对职责进行分组。具体问题会得到具体答案。

标签: c# design-patterns inheritance


【解决方案1】:

更好的方法是将整个代码(1500 多行)拆分为更多不同的子类。然后他们应该从你的主类 Aphrodite 继承。

然后你就有可能从你的主类运行所有方法。

第二种不太好的方法是创建一个静态类 Aphrodite,它在公共属性中创建所有新子类的静态单例对象。 这样您就可以像这样从主类调用每个子类:

// names are only for example :)
Aphrodite.Wine.Drink();
Aphrodite.Wine.NotDrive();
Aphrodite.Bottle.FillWithWine();
Aphrodite.Bottle.DrinkFromBottle();

【讨论】:

  • Architecture-wise 仍然是让子类仅由一个类继承的好解决方案?
  • 不,这就是我写“不太好”的原因。但这是众多方式中的一种:)
【解决方案2】:

如果您绝对必须这样做,您可以在Aphrodite(以及它的一个部分定义中)定义一个内部类,并使其成为包含这些方法的静态类。至少在你重构它之前。

【讨论】:

    【解决方案3】:

    申请"Pure fabrication" GRASP pattern(听起来你很绝望):

    绝望的时候谁来负责,又不想违反高内聚低耦合?

    将一组高度内聚的职责分配给不代表问题域概念的人为或便利“行为”类——为了支持高内聚、低耦合和重用而编造的东西。

    它也像"Extract class" refactoring 一样简单。但说真的,如果你不提供更多细节,这很难说。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 2019-12-13
      • 1970-01-01
      • 2021-12-09
      • 2021-11-10
      相关资源
      最近更新 更多