【问题标题】:Are internal classes inside a library violation of the open/closed principle?库中的内部类是否违反了开放/封闭原则?
【发布时间】:2016-02-19 13:20:24
【问题描述】:

曾几何时,我不得不修改一些外部开源项目以满足内部项目的要求。我已经通过继承完成了它,我认为它是我项目中库的良好设计和干净的解决方案。然而,像this 这样的一些项目有它们的内部类,因此基于继承的扩展是不可能的(这些类只在同一个程序集中可见)。

Here微软声明:

具有访问修饰符 protected internal 的类型或成员可以是 从当前程序集或派生自的类型访问 包含类。

将类定义为库内部的类是一种不好的做法吗?它们是否应该是 protected internal 才能进行扩展?

【问题讨论】:

  • “将类定义为库内部的类是一种不好的做法吗?”不,还好。并非所有事情都必须在项目之外进行更改。内部类型通常是实现细节,可以在未来的版本中更改,而不会对公共 API 产生任何影响。
  • 不能将非嵌套类型定义为protected internal

标签: c# architecture


【解决方案1】:

简短回答:不,不一定。

我不确定您在这里期待什么样的答案。在我看来,一般的答案可能是“这取决于”。

如果系统开发人员希望他们的解决方案的某些部分是可扩展的,那么他们应该按照这种方式进行设计。为什么有人想让扩展和/或覆盖他们的代码部分变得容易,肯定有很多正当的理由。这可能是为了避免破坏与其他组件的可比性,或者避免暴露未来可能发生变化的数据或实现细节,仅举几个公认的模糊和抽象的例子。

如果有疑问,我会联系原始开发人员并询问他们;他们可能有充分的理由做出他们所做的设计选择。一旦您对更改架构的后果有了更多了解,您就可以考虑做什么:如果可行,您可以向系统提交建议的更改。另一方面,如果您的要求与原始开发人员的不同,您可以对系统进行分支并创建自己的单独版本,然后您可以将其回馈给社区。这就是开源软件的美妙之处。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 2011-01-23
    • 2018-06-11
    • 1970-01-01
    相关资源
    最近更新 更多