[C#] API 設計規則

API 設計規則

先前看了一篇文章,在講述 API 的設計理念,方法與規則,分為三個階段。算是一篇不錯的文章,很實用的,於是就做了點筆記,把重要的內容記錄下來,提醒自己將來好遵守。

基礎 : 考慮用詞與語法一致

  • API 的命名拼寫要正確。
  • 準確的用詞。(正反義詞不可混用。)
  • 注意單複數。
  • 不要誤用詞性。 (例如 : Success/Failure<名詞>,Succeed/Fail<動詞>,Successful/Failed<形容詞>)
  • 處理縮寫。(Pascal 與 Camel 命名方式)
  • 用對時態和語句。(盡量避免使用被動語句)

進階 : 多思考語義與可用性

  • 單一職責原理。(SRP,一個類別或是方法,只專職做一件事就好)
  • 避免副作用。(Expected 與 OCP,當類別擴充時,不會影響到原生的系統結構,要與預期的結果相符。)
  • 合理的設計函數參數。(相關性越高的參數,越要將參數前置,或是將同類型的參數整合到所傳遞的物件中。)
  • 合理的運用函數多載。(Overload。Hint : 當傳入的參數,無法進行有效區分時,建議不要選擇多載)
  • 一致性的術語表
  • 遵循一致性的 API 風格

Note : 一致性可以最大化程度的降低訊息熵

一致性範例
--------------------------------------
pic   | 圖片    | image, picture
--------------------------------------
path  | 路徑    | URL,url, uri
--------------------------------------
on    | 事件綁定| bind, addEventListener
--------------------------------------
off   | 解除綁定| unbind, removeEventListener
-------------------------------------------
emit  | 觸發事件| fire, trigger
--------------------------------------
module| 模組    | mode
--------------------------------------

Note : 函數簽名(Function Signature),滿足函數簽名的三要素,1. 函數名 2. 參數設定 3. 返回值類型

深入 : 要考慮整個系統與整個系統架構與布局。

  • 版本控制 (Git, CVS, and SVN,大版本號不變的情跨下,API 保證向下相容)
  • 確保向下相容 (不要輕易地刪除公開 API,可以使用 #Deprecated)
  • 設計擴展機制 (OCP,對擴展開放,對修改封閉。接口足夠抽象。)
  • 控制 API 的抽象級別。(1. 高抽象。2. 場景範圍。) 1. Abstract 2. When 3. Where 4. Concrete
  • 收斂 API 集 (1.對API進行減法 2. 收斂近似職責的 API 3. 多型)
  • 發散 API 集 (擴充不同的功能)
  • 訂定 API 可支援的策略。 (1. 大版本號的支持週期多久 => V.v.x.... 2. Long Term Support 3. 如何從舊版升級成新版本)
1. 邏輯和抽象
2. 領域知識 (Domain Knowledge)
3. 語感 (讓人容易閱讀)

參考

  1. 來源-API設計之道

留言

這個網誌中的熱門文章

[Tools] GCOV & LCOV 初探

Quilt Patch 管理操作方法

[C#]C# Coding 規則