怎样设计接口?
怎樣設計接口?
??? 眾所周知,接口是提供給其它模塊或者系統(tǒng)使用的一種約定或者規(guī)范。因此接口必需要保
證足夠的穩(wěn)定性和易用性。這是設計接口的基本要求。
1.穩(wěn)定性
??? 接口必須相對穩(wěn)定,否則將導致接口的使用者和提供者為了適應新接口而不斷改動接口
的實現(xiàn),可能反復進行無用功,嚴重時影響整個軟件開發(fā)進度。那么怎樣保證設計的接口相
對穩(wěn)定呢?
??? 首先,接口的語義必須明白。包含接口調(diào)用方法、接口名稱、參數(shù)的類型和名稱。抽象
的接口名稱或者參數(shù)名稱使人困惑或者理解錯誤。例如以下例:
??? History::SetAttribute
??? 設置歷史記錄的屬性,初看不知道該接口要做什么。除非History的屬性非常多否則沒有
必要設計這種接口。
??? ioctl
??? C庫中的ioctl,事實上非常難用原因是須要設置項太多,每一個項的參數(shù)又不太一致,接口使
用者的壓力就較大了??墒墙涌谠O計者也是不得已而為之,因為IO的設置接口的應用情況較
多,假設每一個設置接口都單獨提供一個接口則會導致非常多的接口,另外就是保證接口的相
對穩(wěn)定,採用抽象的數(shù)據(jù)的接口便于移植和穩(wěn)定。
??? 因此,明白的接口語義例外情況就是就是對于輔助功能,假設須要較多接口,則能夠合
成一個接口,採用不同參數(shù)區(qū)分(如windows中的窗體處理過程類型的定義也是這種情況)。
??? 其次,採用版本號定義來區(qū)分接口的差異。比方提供接口版本號查詢功能,接口實現(xiàn)著提供
接口版本號的查詢功能。
2.易用性
??? 接口是提供給第三方使用的,較難用的接口會導致接口使用者的抱怨。
??? 如:
??????? SetCookie(void* handle, const CookieParam& param);
??????? GetCookie(void* handle, CookieParam& param);
??? 此接口名稱的意義還是比較明白的,可是參數(shù)CookieParam過于抽象,將導致接口的調(diào)用
者在使用接口時,須要將基本數(shù)據(jù)類型的值組成一個CookieParam類型,然后才干調(diào)用接口。
這是一種糟糕的接口設計。既不便于使用又不便于編譯器優(yōu)化(待確認)。
??? 假設該為以下的接口則較easy使用
??????? SetCookie(void* handle, const URL& url, const String& cookie);
??????? GetCookie(void* handle, const URL& url, String cookie);
??? 除非接口的參數(shù)個數(shù)超過5個,否則最好採用基本數(shù)據(jù)類型作為參數(shù)。超過5個參數(shù)的函數(shù)
一方面給調(diào)用者帶來困難,參數(shù)排列組合的情況過多,還有一方面就是不利于編譯器優(yōu)化時採用
寄存器傳遞參數(shù)。
3.怎樣設計接口?
??? 採用OOD思想,即面向對象的思想,提供類接口或者COM接口。
??? 對于C函數(shù)接口怎樣設計呢?事實上和C++接口設計原則一樣,也採用面向對象的思想,僅僅是
將類設計成結構,公共的成員函數(shù)變?yōu)槿值暮瘮?shù),私有的成員函數(shù)變?yōu)閟tatic函數(shù)就可以。
函數(shù)接口的第一參數(shù)就相當于C++中的this指針就可以。
4.接口設計的其它要求
??? * 規(guī)范性:主要是接口設計的代碼規(guī)范,這是最主要的要求。同一時候考慮C接口命名污染的
????????????? 問題。一般C接口都會在接口前加上公司或者模塊的標識。
??? * 可移植性:對于須要在多平臺實現(xiàn)的接口須要考慮接口本身的可移植性,因此最少使用
??????????????? 對于系統(tǒng)依賴的類型作為接口的參數(shù)類型或者返回值類型。
??? * 魯棒性:接口須要有適度的魯棒性,主要是指可以在多種情況下接口都能實現(xiàn)統(tǒng)一的效
????????????? 果,不會隨著調(diào)用者傳入的參數(shù)的變化而導致接口的輸出出現(xiàn)違背接口語義的
????????????? 情況出現(xiàn)。
??? * 安全性:接口定義時須要嚴格限制參數(shù)的讀寫權限,假設僅僅能是僅僅讀的參數(shù)一定要設置
????????????? 成const,以免出現(xiàn)非法使用。
??? * 兼容性:這是接口擴充的原則,必須保證同一個接口實現(xiàn)后向兼容前一版本號的使用。擴
????????????? 充的同類接口也能兼容老接口的實現(xiàn)。
5.怎樣擴展接口?
??? 1.採用版本號特性,不同版本號的接口實現(xiàn)能夠同意有差異,可是提供版本號查詢功能;
??? 2.序號表示新增的接口,如SetCookie、SetCookie1、SetCookie2
轉載于:https://www.cnblogs.com/gcczhongduan/p/4203376.html
總結
- 上一篇: c# 如何将字符串中用,分开的数字分别存
- 下一篇: APPCAN MAS接口之SOAP