2016-02-19 51 views
2

曾幾何時,我不得不修改一些外部的開源項目來滿足內部需求。我已經完成了繼承,我認爲它是我的項目中庫和乾淨解決方案的良好設計。然而,像this這樣的項目有其內部的類,所以基於繼承的擴展是不可能的(這些類只在同一個程序集內可見)。圖書館內部的類是否違反開放/封閉原則?

Here微軟狀態:

類型或具有受保護的內部可以是 從當前組件或從自 包含類派生類型訪問訪問修飾符成員。

這是一個糟糕的做法,將類定義爲內部庫的內部?他們應該是protected internal是可擴展的嗎?

+2

「這是一種不好的做法,將類定義爲內部庫?」不,還好。在項目之外,並非所有事情都是可以改變的。內部類型通常是實現細節,在未來版本中可以更改,而不會對公共API產生任何影響。 –

+1

您不能將非嵌套類型定義爲'protected internal' –

回答

2

簡答:不,不一定。

我不確定您在這裏期待的具體答案。我看到它的方式,一般的答案可能是「它取決於」。

如果系統的開發人員打算將他們的解決方案的一部分擴展,那麼他們應該這樣設計。必須有許多有效的理由爲什麼有人會而不是想要使它容易擴展和/或覆蓋他們的代碼的分析。這可能是爲了避免打破與其他組件的可比性,或者避免暴露將來可能會改變的數據或實現細節,僅僅提到一些公認模糊和抽象的例子。

如果有疑問,我會聯繫原始開發人員並向他們詢問;他們可能有充分的理由做出他們所做的設計選擇。一旦您對更改架構的後果有更多瞭解,您可以考慮採取什麼措施:如果可行,您可以向系統提交建議的更改。另一方面,如果您的需求與原始開發人員的要求不同,您可以分支系統並創建您自己的單獨版本,然後您可以將其返回給社區。這就是開源軟件的美妙之處。