嵌入式開發(fā)人員編寫可重用的固件需要創(chuàng)建干凈的應(yīng)用程序接口(API)。該API需要經(jīng)過深思熟慮,以便使重用變得容易和高效。理想情況下,API應(yīng)該至少具備這六個特征。
特征1——顯而易見,易于理解
就像任何一個軟件可以從一個應(yīng)用程序重用到下一個應(yīng)用程序一樣,API應(yīng)該簡單、明顯、易于理解。并且要記住!當API不一致并且使用看似隨機的語法時,使用現(xiàn)有的組件或庫會非常煩人。你不希望用戶為了找到正確的調(diào)用或操作而不斷地查看文檔。
特征2——可擴展
技術(shù)以驚人的速度變化,有時這些變化需要對API進行添加或修改。因此,API應(yīng)該以這樣一種方式開發(fā),即它可以很容易地擴展以包含新的特性,而不必從頭重寫API或進行徹底的檢查。API在保持與以前版本一致性的同時添加新功能的能力是決定其長期生存能力的一個關(guān)鍵因素。
特征3——具有高內(nèi)聚力
內(nèi)聚性是指一個模塊的元素,或者在這種情況下是API,屬于一起的程度。低內(nèi)聚力的一個例子是將微控制器的所有外設(shè)功能集中到一個接口中。界面將會很大且難以操作。相反,微控制器外設(shè)功能可以分解成單獨的模塊,每個模塊都有特定于單個外設(shè)的API函數(shù),以增加凝聚力。
特征4——利用抽象數(shù)據(jù)類型
在嵌入式開發(fā)中,一個好的API將在不止一個系統(tǒng)、平臺和MCU上使用。系統(tǒng)之間的實現(xiàn)細節(jié)可能需要略有不同,但是接口需要保持一致。抽象數(shù)據(jù)類型的使用有助于將數(shù)據(jù)的使用與實現(xiàn)細節(jié)分開,并有助于使接口更具可移植性。
特征5——使用封裝和數(shù)據(jù)隱藏
一個好的API應(yīng)該遵循面向?qū)ο筌浖淖罴褜嵺`,即使該軟件是用c語言編寫的不放眼全球。相反,通過get和set helper函數(shù)執(zhí)行對關(guān)鍵數(shù)據(jù)的訪問。API還應(yīng)該盡可能少地暴露給外部世界,也就是說,只暴露API用戶需要知道的東西。本質(zhì)上,API應(yīng)該以黑盒的方式提供它的功能。用戶不需要知道API的實現(xiàn)細節(jié),只需要知道使用接口的前置和后置條件。
特征6——遵循“少即是多”的原則
最好的API能夠通過幾個簡單的接口提供關(guān)鍵的系統(tǒng)功能。開發(fā)人員有時會受到誘惑,通過API暴露外設(shè)、芯片或應(yīng)用程序庫的每一個可能的功能。相反,他們應(yīng)該仔細考慮API,盡量減少它暴露的特性。許多復雜而笨拙的API可以被重構(gòu)為更簡單的界面,用戶會發(fā)現(xiàn)更易于管理。
在嵌入式開發(fā)中,API對于可重用軟件的開發(fā)至關(guān)重要,API的正確設(shè)計可以確保它在未來幾年都有用。一個好的API還應(yīng)該具備哪些特征?