我正在學習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. python字符串之前的b前綴是什麼意思?
- 4. 什麼是註冊前綴?
- 5. 什麼是表格前綴?
- 6. Python字典鍵/帶前綴的值 - 前綴是什麼?
- 7. CString變量名稱前綴
- 8. 前綴相同名稱前增量
- 9. 是否爲MovieClip名稱保留「_」前綴?
- 10. 爲什麼git大寫我的分支名稱前綴?
- 11. 爲項目名稱添加列名前綴的優點/缺點是什麼?
- 12. 名稱&註冊您的類與所需的名稱而不是前綴T
- 13. '&'和'!'的含義是什麼?屬性名稱之前?
- 14. 鎖前綴的範圍是什麼?
- 15. CSS前綴的用途是什麼?
- 16. 什麼是r-前綴的函數?
- 17. ruby中的類名之前的符號/運算符是什麼?
- 18. 屬性名稱的下劃線前綴?
- 19. 前綴不起作用的SAS名稱
- 20. 沒有「lib」前綴名稱的cmake add_library
- 21. 變量之前括號中的類型名稱是什麼意思?
- 22. 什麼是Fluent在WPF控件名稱「Fluent:RibbonWindow」中表示的前綴?
- 23. 爲什麼沒有XMLNS前綴的XML屬性不等於具有相同本地名稱的前綴屬性?
- 24. 爲什麼前綴返回沒有特定前綴的文檔?
- 25. 命名元素時,XAML中x:前綴的用途是什麼?
- 26. NS前綴是什麼意思?
- 27. Enterprise Architect在「::」之前編輯類名稱
- 28. 包名稱之前的關鍵字'unit'有什麼作用?
- 29. 爲我的所有框架類名稱加前綴不好嗎?
- 30. 在Objective-C中強調前綴變量名稱是什麼意思?
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