軟件的邏輯結(jié)構(gòu)可以劃分為下面四個(gè)基本層次
從下往上依次是
1、基礎(chǔ)設(shè)施層——這個(gè)層次是純技術(shù)層次,解決的是系統(tǒng)的物理問題,比如database gateway、網(wǎng)絡(luò)通信、對(duì)象容器……這個(gè)部分與業(yè)務(wù)需求關(guān)系不大,是系統(tǒng)的物理?xiàng)l件。
2、business對(duì)象——在這個(gè)層次上,業(yè)務(wù)要素出現(xiàn)了,業(yè)務(wù)領(lǐng)域中的概念在這里實(shí)現(xiàn)。比如一個(gè)航運(yùn)公司的系統(tǒng),這里就應(yīng)該有航線、航班、座位、乘客、登機(jī)牌……這些對(duì)象應(yīng)該擁有與實(shí)際業(yè)務(wù)領(lǐng)域相符的屬性、方法。mda.com
3、business流程——這個(gè)流程不是指程序解決問題的流程,而是用戶的商業(yè)活動(dòng)的流程。他體現(xiàn)的是端到端的業(yè)務(wù)流程。比如:檢票員為旅客辦理登機(jī)牌。business流程的輸入?yún)?shù)是business對(duì)象,輸出參數(shù)是business對(duì)象,產(chǎn)生的異常也是business對(duì)象。business對(duì)象在這里組合、串接,實(shí)現(xiàn)業(yè)務(wù)流程的自動(dòng)化。這個(gè)層次是在直接實(shí)現(xiàn)用戶的需求。
4、UI和接口——這個(gè)層面調(diào)用business流程,將執(zhí)行的結(jié)果交給軟件的用戶,或者別的系統(tǒng)。
這種邏輯層次劃分是最基本的情況,各種復(fù)雜的層次都是這種方式的一種擴(kuò)充。比如下面這樣的形式
在基礎(chǔ)設(shè)施層和business對(duì)象之間,加入了一個(gè)DAO層。DAO層一方面負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),體現(xiàn)了數(shù)據(jù)的存儲(chǔ)方式,另一方面體現(xiàn)了業(yè)務(wù)對(duì)象的屬性。這樣就使business對(duì)象只需要負(fù)責(zé)純粹的業(yè)務(wù)邏輯,不用關(guān)心物理問題。簡(jiǎn)單的說(shuō),業(yè)務(wù)對(duì)象里面不需要寫SQL語(yǔ)句了。
business對(duì)象和business過(guò)程之間,加入了Service層。business對(duì)象也是具有行為的,但是這樣的行為是比較細(xì)微的,需要調(diào)用者在多次調(diào)用之間保持必要的狀態(tài),需要用Service層來(lái)做一個(gè)封裝,更明確的表達(dá)業(yè)務(wù)含義。
單元測(cè)試
單元測(cè)試需要關(guān)心一個(gè)問題:層次之間的依賴關(guān)系。如果要測(cè)試某一個(gè)層次上的對(duì)象,必須同時(shí)建立他所依賴的每一個(gè)對(duì)象。層次之間的依賴越簡(jiǎn)單,測(cè)試越容易。