【问题标题】:Class design, Interfaces or Concrete classes类设计、接口或具体类
【发布时间】:2011-05-01 16:19:56
【问题描述】:

我在使用接口与具体类时遇到问题。
我有一个实现一些常见属性/方法的基类。现在我有两个可能的扩展。这个基类可以有一些称为Parameters的属性,也可以有另一个称为Children的属性,或者两者都有。

在我看来,我可以创建 2 个接口(IParameterised、IParent)或者我可以实现三个子类(ParameterObject、ParentObject、ParentParameterObject)。问题是,其中哪一个是更好的设计。我目前倾向于接口方法,但我不是经验丰富的程序员,所以欢迎任何建议

【问题讨论】:

    标签: c# interface abstract-class


    【解决方案1】:

    关于这个主题的一些背景应该会让你开始:Liskov substitution principle(更多here)和composition over inheritance的概念。

    简而言之,不要实现 3 个子类(即继承方法):如果您以后需要 2 或 3 个额外的通用属性/方法会怎样?只需添加 2 项,您就可以看到 15 种左右的独特组合。对于组合,请查看 statestrategy 模式。

    【讨论】:

    • 感谢您的帮助,Liskov 替换(虽然阅读量很大)是一个相当不错的原则!
    【解决方案2】:

    我认为您的“倾斜”是正确的,其他人也会同意: http://www.artima.com/lejava/articles/designprinciples4.html

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-26
      • 2015-07-09
      相关资源
      最近更新 更多