2016-02-19 48 views
2

曾几何时,我不得不修改一些外部的开源项目来满足内部需求。我已经完成了继承,我认为它是我的项目中库和干净解决方案的良好设计。然而,像this这样的项目有其内部的类,所以基于继承的扩展是不可能的(这些类只在同一个程序集内可见)。图书馆内部的类是否违反开放/封闭原则?

Here微软状态:

类型或具有受保护的内部可以是 从当前组件或从自 包含类派生类型访问访问修饰符成员。

这是一个糟糕的做法,将类定义为内部库的内部?他们应该是protected internal是可扩展的吗?

+2

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

+1

您不能将非嵌套类型定义为'protected internal' –

回答

2

简答:不,不一定。

我不确定您在这里期待的具体答案。我看到它的方式,一般的答案可能是“它取决于”。

如果系统的开发人员打算将他们的解决方案的一部分扩展,那么他们应该这样设计。必须有许多有效的理由为什么有人会而不是想要使它容易扩展和/或覆盖他们的代码的分析。这可能是为了避免打破与其他组件的可比性,或者避免暴露将来可能会改变的数据或实现细节,仅仅提到一些公认模糊和抽象的例子。

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