我正在學習MVP模式。在一些例子中,我看到了這個!任何人都可以證明爲什麼程序員使用這個名稱約定?IController,IObserver之類的名稱前的前綴「I」是什麼?
回答
通常我在那裏表示一個接口。沒有我是一堂課。我個人不喜歡這個。我認爲這在網絡中更常見。我還沒有看到它在Java中太多
原因,我不喜歡:
- 的IDE現在表明,指示類是否是一個接口或沒有圖標。
- 如果我想將接口更改爲抽象類,則必須重命名類
- 它會傷害可讀性。
'我'代表界面。將接口與類/結構區分開來是一種常見的命名約定。
接口是而不是類 - 它們定義的行爲和類提供了實現。
閱讀這篇文章在MSDN上的詳細信息:Choosing Between Classes and Interfaces
接口定義簽名的一組成員 實施者必須提供的。接口無法爲成員提供實施 的詳細信息。例如,ICollection界面 定義了與處理集合相關的成員。 實現接口的每個類都必須提供 這些成員的實現細節。類可以實現多個接口。
這是針對微軟相關技術還是所有編程語言,我們都有這樣的代碼約定? – 2013-03-14 10:36:56
主要是微軟。 – 2013-03-14 13:05:27
這是一個從Hungarian notation被認爲是一個好主意的年齡的神器。它讓用戶知道名稱是用於界面的。
此外,這是一個非常愚蠢的做法。
接口的名稱應反映它表示的類之間的合同種類。它應該而不是告訴你它已被綁定到哪個類。
應該class PDF extends Document implements Printable
,因爲它可以讓你知道類實現某種原因print()
方法(在一個真實的世界,將是實際上是一個糟糕的API設計,但是這是一個例子)的代替class PDF extends Document implements IDocument
..因爲這告訴你沒有什麼。
- 1. 當我稱之爲類方法名稱前的括號中的參數(?或前綴)時,該做什麼?
- 2. 反斜槓作爲函數名稱的前綴是什麼?
- 3. 按前綴過濾數組 - 該函數的名稱是什麼?
- 4. 帶有前綴的動態類名稱
- 5. python字符串之前的b前綴是什麼意思?
- 6. Type.GetType搜索規則的前綴爲「。」的類型名稱是什麼?
- 7. 沒有定義前綴的XML文檔的前綴是什麼?
- 8. 路由:控制器資源之前的前綴項名稱
- 9. 什麼是註冊前綴?
- 10. 什麼是表格前綴?
- 11. $(前綴)/ etc/gitconfig上的$(前綴)是什麼?
- 12. Python字典鍵/帶前綴的值 - 前綴是什麼?
- 13. 表名之前的部分是什麼?
- 14. CString變量名稱前綴
- 15. 前綴相同名稱前增量
- 16. 是否爲MovieClip名稱保留「_」前綴?
- 17. 爲什麼git大寫我的分支名稱前綴?
- 18. 爲項目名稱添加列名前綴的優點/缺點是什麼?
- 19. 名稱&註冊您的類與所需的名稱而不是前綴T
- 20. '&'和'!'的含義是什麼?屬性名稱之前?
- 21. 爲什麼R在導入的數據集名稱前加前綴X
- 22. CSS前綴的用途是什麼?
- 23. NSLog中的前綴是什麼意思?
- 24. 什麼是Blur.js中的緩存前綴?
- 25. 什麼是r-前綴的函數?
- 26. 鎖前綴的範圍是什麼?
- 27. ruby中的類名之前的符號/運算符是什麼?
- 28. 什麼叫「en-US」之類的語言國家前綴?
- 29. 屬性名稱的下劃線前綴?
- 30. 沒有「lib」前綴名稱的cmake add_library
1)考慮下面這行代碼:'ICollection collection = this.Foo();'你在IDE中沒有圖標。 2)從合同切換到實現*是代碼的重大變化(沒有多重繼承)3)請參閱點1) – 2013-03-14 10:33:54
1)更正你沒有圖標,但你真的在乎它是否是一個接口嗎? 2)同意它將更改代碼,但爲什麼我必須重新命名爲重構的一部分。我想專心於編譯和結構。 3)讓我在那裏我不認爲有助於可讀性。它使得班級名稱更難以記住IMO – RNJ 2013-03-14 10:36:13
3)你不會將'I'添加到類中 - 因此班級的名稱是* not *難以記憶,並且避免混淆什麼是類和什麼是界面;-) – 2013-03-14 13:07:09