簡體   English   中英

接口的Typescript樣式指南

[英]Typescript style guide for interfaces

這是一個可能沒有一個正確答案的問題,因為我確實編碼樣式是多種多樣的,特別是在不同語言之間,例如javascript中的駝峰案例函數名稱和C#中的pascal大小寫方法。 我完全可以接受。

也許我對此過於擔心,但我剛剛開始研究打字稿,非常喜歡它的外觀,並計划將它與Angular2一起使用,並希望建立一個好的風格指南。

我真的不明白的是2點在這里 ,不要用我前綴接口。 在此之前,我認為這幾乎是普遍的。 我有一個類Car,所以如果界面只是在前面添加一個自然名稱... ICar。 只要看到我的前綴,就會知道你有一個界面。

我想遵循任何建議的做法,但這個我真的不知道為什么要去。

沒有人知道為什么,我認為這幾乎是普遍的慣例,在這里被勸阻了? 我知道你可以使用你喜歡的任何約定,只是想知道這個常見約定是否有某些原因不能在Typescript中使用。

在此先感謝任何意見/信息!

I作為Java和C#(可能還有其他人)的前綴很大,但我不認為這仍然是一個好主意但是如何改變大多數開發人員和現有代碼庫使用的東西。

它類似於匈牙利符號,這被普遍認為是不好的做法。 只要給它一個有意義的名字。 如果你有不同種類的Car不是制造Car的通用接口和class FancyCar implements Car更自然。 像前綴這樣的東西只會阻止人們思考他們真正想要表達的內容。 另請參閱http://c2.com/cgi/wiki?IntentionRevealingNames

還有像Dart這樣的語言(可能還有許多其他我不知道的),其中interfaceclass之間沒有這么明顯的區別。 在Dart中,您可以實現任何類。 類的接口只是一個interface

更新

我不是說命名很容易。 事實上,我認為它是軟件開發中最難或最難的部分。 只是因為“精英”的一般理由是技術原因的前綴並不是最好的方法。 這並不意味着有替代方案只有優點而且沒有缺點。 在這種情況下,似乎使用了像UserServiceUserServiceImplMockUserService這樣的命名。 這種方式在代碼的大多數部分中使用UserService最自然的方式,而衍生工具僅在私有方中使用。 否則,如上所述,一致性更為重要。 如果某種風格在您使用的語言中更常見,我建議您也在代碼中使用它。

類似的問題在這里被問到困惑TypeScript的接口和類編碼指南

我的回答是: https//stackoverflow.com/a/41967120/586609

原因:

  1. 匈牙利符號的時代已經過去了
  2. I前綴違反了封裝原則
  3. 防止命名錯誤
  4. 正確選擇的名稱可以針對API Design Myth:Interface as Contract進行接種。

除了因為它是慣用之外,沒有理由做或不做某事。 如果您希望您的代碼適合,您可以按照您正在使用的語言遵循其他人遵循的規則,而不要考慮它(或選擇其他語言)。

至於具體為什么不加前綴,有三個很好的理由:

  1. 使用class關鍵字時會隱式創建接口,並且在使用type關鍵字時也會創建接口。 因此,通過向顯式聲明的接口添加前綴,現在您有一些帶有前綴的接口(您自己使用前綴創建的接口),還有一些沒有前綴的接口。 這是令人困惑和不一致的。
  2. 類型(接口)和代碼存在於編譯器的獨立命名空間中,因此您不能與類型名稱和變量名稱沖突。 因此,沒有理由通過為它們添加前綴來嘗試使接口名稱唯一。
  3. I加前綴只是匈牙利符號系統的另一種形式; 說一個類型是一個接口,為人類編寫代碼提供附加信息。

還有兩個原因

模塊化隨着代碼庫的增長,代碼開始模塊化。 模塊的通常設計目標是暴露合同並隱藏內部。 合同最好用接口表示,過了一段時間,大多數(如果不是全部)暴露的工件都是接口和工廠。 對於這些模塊的消費者來說,使用UsersCredentials而不是IUsersICredentials

字母順序例如,快速訪問“文件”導航器中按字母順序排序的列表中的“接口和類”。 與用戶合作時,最好在列表UserImpl UserUserServiceUserImpl一起,而不是通過I條目,然后是C條目,然后是Service條目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM