摘要
在開發(fā)中一直覺得好的軟件架構(gòu)可以做到事半功倍,而且可以做到代碼復(fù)用和移植。
但是如果沒有架構(gòu)或者說架構(gòu)很差,那么移植將是很痛苦的事,特別是對不熟悉改功能的人來講還不如自己寫呢,移植不對那將是很頭疼的事。
所以隨著開發(fā)越來越多,漸漸的發(fā)現(xiàn)我們考慮問題應(yīng)該從廣度和深度來考慮,做新項目的時候,更應(yīng)該考慮到以后出現(xiàn)的可能性,比如說需求變更,底層變更,所以這個時候軟件的架構(gòu)和程序模塊化就很重要。
我們不能做牽一發(fā)而動全身的事,所以提出了軟件架構(gòu)的一些想法。
基本框架圖
(1)架構(gòu)設(shè)計的目的
1、應(yīng)用的代碼邏輯清晰,且避免重復(fù)的造輪子。
2、如果沒有好的架構(gòu),移植將會是一件很痛苦的事情,因此一個好的架構(gòu)設(shè)計,方便軟件的移植。
3、最大限度的復(fù)用。
4、高耦合低內(nèi)聚。
(2)設(shè)計思路
如何把硬件的驅(qū)動和一個功能封裝成一個個的模塊,然后可以像小朋友搭積木一個,一個個模塊可以快速的拼接起來,組成一個個不同的模型。
我們的嵌入式架構(gòu)思路也是來源于此,即功能模塊化設(shè)計、分層設(shè)計。
模塊化設(shè)計:將收集到的需求,進(jìn)行歸類,總結(jié)和分析,將這些需求概括為一個個單獨的功能,每一個功能,做成一個單獨的功能模塊。
分層設(shè)計一句話不好直接表達(dá),其主要體現(xiàn)在一下幾方面:
1、功能模塊對外調(diào)用的模塊封裝成一個個API,將底層驅(qū)動做個API以供功能模塊調(diào)用。(各個功能模塊可以獨立編譯(如通信模塊純ANSI C,可在任意平臺復(fù)用),或者調(diào)用驅(qū)動層接口(日志庫模塊調(diào)用了驅(qū)動讀寫Flash),總而言之,言而總之,封裝出各個功能獨立的可復(fù)用的功能模塊。)
2、API分為驅(qū)動層API和應(yīng)用層API,而不是所有程序都調(diào)用驅(qū)動層API。(整個應(yīng)用中都調(diào)用驅(qū)動層API會導(dǎo)致應(yīng)用中驅(qū)動調(diào)用隨處可見,無法移植和最大限度的復(fù)用)
總體分 硬件驅(qū)動層-->功能模塊層-->應(yīng)用層接口-->業(yè)務(wù)邏輯層-->應(yīng)用層
總體結(jié)構(gòu)示意框圖:

說明:
1.層與層之間不能跨層調(diào)用。
2.模塊與模塊各自獨立,無依賴關(guān)系。
3.模塊提供統(tǒng)一的接口供上層調(diào)用,模塊的內(nèi)外接口分明。
(3)模塊層次說明
硬件驅(qū)動層
硬件驅(qū)動層包含板載硬件資源正常運行所需的所有驅(qū)動程序并提供API給功能模塊調(diào)用。
功能模塊層
功能模塊層包括實現(xiàn)具體功能的函數(shù),通過調(diào)用驅(qū)動層API實現(xiàn)相應(yīng)功能,同時提供可調(diào)用的API給業(yè)務(wù)邏輯層。
應(yīng)用層
應(yīng)用層對業(yè)務(wù)層提供使用到的接口。一般可以和功能模塊層劃歸一層
業(yè)務(wù)邏輯層
業(yè)務(wù)邏輯層包括產(chǎn)品整體功能的各個業(yè)務(wù)流程,通過調(diào)用功能模塊層的API實現(xiàn)。
應(yīng)用層
應(yīng)用層將各個業(yè)務(wù)邏輯進(jìn)行整合調(diào)用,完成整個產(chǎn)品的功能。
(4)優(yōu)勢
如果驅(qū)動變動了,或者換不同平臺,只需更改驅(qū)動層,應(yīng)用層不受影響。
如果功能模塊變動了,只需升級相應(yīng)的功能模塊,其他的模塊不受影響,應(yīng)用層也不受影響。
按照這種邏輯設(shè)計好之后,主要的工作就是在業(yè)務(wù)邏輯層。應(yīng)用層則為程序的總體流程和框架,主要調(diào)用業(yè)務(wù)邏輯層實現(xiàn)不同的功能。
開發(fā)心得
除了軟件架構(gòu),良好的編程習(xí)慣就顯得很重要,特別是做到歸類,對于用不到的代碼應(yīng)該及時清理,對于一些變量和數(shù)據(jù)結(jié)構(gòu)的定義等應(yīng)該集中,還有就是代碼的注釋,代碼的簡潔,盡量做到不寫效率低下的代碼??傊?,每個人都有自己的習(xí)慣和對編程的認(rèn)識,只要能在過程中提升就是進(jìn)步。加油!