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