2008-09-05 79 views
10

我正在設計一個新的系統,並且我有很多隨系統時間增長的接口。什麼是命名這個接口接口和版本控制

ISomethingV01 
ISomethingV02 
etc 

,我做這個

public interface ISomething{ 
     void method(); 
} 

然後,我有那麼現在我做什麼補充方法2的最佳做法是什麼?

public interface ISomethingV2:ISomething{ 
     void method2(); 
} 

或相同的其他方式?

回答

5

理想情況下,你不應該經常更改你的接口(如果有的話)。如果您確實需要更改界面,則應重新考慮其用途,並查看原始名稱是否仍適用於此界面。

如果您仍然覺得接口會改變,接口變化很小(添加項目),並且您可以控制整個代碼庫,那麼您應該修改接口並修復所有編譯錯誤。

如果您的更改是如何改變界面的使用方式,那麼您需要創建一個單獨的界面(最有可能使用不同的名稱)來支持該替代使用模式。

即使最終創建了ISomething,ISomething2和ISomething3,接口的使用者也很難弄清楚接口之間的差異。他們什麼時候應該使用ISomething2,什麼時候應該使用ISomething3?然後,你必須討論廢棄ISomething和ISomething2的過程。

2

接口的目的是定義類型必須實現的抽象模式。

這將是更好實現爲:

public interface ISomething 

public class Something1 : ISomething 
public class Something2 : ISomething 

你不通過創建同一接口的多個版本中獲得代碼重用或可擴展的設計形式什麼。

2

我不知道爲什麼人們downvote您的帖子。我認爲很好的命名準則是非常重要的

如果您需要保持與prev的兼容性。相同接口的版本考慮使用繼承。 如果您需要引入接口的新版本中考慮以下規則:

儘量有意義的後綴添加到您 接口。如果不可能以 創建簡潔名稱,請考慮添加 版本號。

4

我同意Garo Yeriazarian,更改界面是一個嚴肅的決定。另外,如果您想要推廣使用新版本的界面,則應將舊版本標記爲過時。在.NET中,您可以添加ObsoleteAttribute

6

我認爲你的接口過度。邁爾和馬丁告訴我們:「開放延伸,但關閉修改!「

然後Cwalina(等人)中重申:

從框架設計指南...

一般來說,類是優選的 構建體用於暴露抽象 的接口的主要缺點。是 ,它們在靈活性上比 類靈活得多,當涉及到允許 API的演變。一旦你發佈了一個 接口,它的成員集合永遠是固定的 。添加到接口將會破壞實現接口的現有類型 。

一個類提供了更多的靈活性。 您可以將成員添加到 已發貨的類中。只要 方法不是抽象的(即,只要您提供該方法的默認實現 即可),任何現有的派生類繼續 函數不變。

alt text