在理想的世界中,新版本將引入額外的功能,同時仍然保持100%向後兼容以前版本的API。不幸的是,理想的世界仍然難以捉摸,並不總能保持完全的向後兼容性。在這種情況下,版本後綴是適當的模式。
標準的.NET命名約定是使用增量編號,如Class
,Class2
,Class3
等。這來自COM接口的命名約定,專爲您所描述的用例而設計。例如,IHTMLDocument
接口目前有8個版本,從IHTMLDocument
直到IHTMLDocument8
。
原來Framework Design Guidelines書,由Cwalina和艾布拉姆斯,明確建議這種做法,與具有作者這樣說的:
DO使用數字後綴來表示已有API的新版本,如果API的現有名稱是唯一有意義的名稱(即,它是行業標準),並且添加任何有意義的後綴(或更改名稱)不是合適的選項。
// old API
[Obsolete("This type is obsolete. Please use the new version of the same class, X509Certificate2."]
public class X509Certificate { ... }
// new API
public class X509Certificate2 { ... }
的舊約定,再加上原有的Windows團隊,是後綴Ex
添加到API,這是從字的新的和改善的版本「延長」。但這並不能很好地擴展,導致易混淆的後綴ExEx
。我不認爲有一個ExExEx
;每個人都害怕觸摸這些API。該框架設計指南建議明確對這種做法,誰去建築師.NET鄉親們已經吸取了教訓:
不要使用「EX」(或類似)後綴的標識符以區別於同一API的早期版本。
[Obsolete("This type is obsolete. ..."]
public class Car { ... }
// new API
public class CarEx { ... } // the wrong way
public class CarNew { ... } // the wrong way
public class Car2 { ... } // the right way
public class Automobile { ... } // the right way
顯然,作爲他們最後的代碼示例提示,如果你是在API的新版本增加了特定功能的支持,你最好關閉命名新的類/接口並提及該特定功能。
雖然上面幾乎專注於類和接口,但對於可能在稍後版本中添加的該類的任何成員函數,同樣的邏輯也適用。原始函數可以保留其原始名稱,新添加的函數具有不同的名稱,以反映其迭代或其添加的功能。
不知道是否存在命名約定,但是我會使用'MyClassVX'並將之前的過時標記爲過時標記。 – thijmen321
有人可能會認爲這個問題主要是基於意見的,所有關於命名約定的問題都是如此。也許你的問題會更好地在[programmers.stackexchange.com](http://programmers.stackexchange.com)上收到? –