軟件架構(gòu)模式—分層架構(gòu)
分層架構(gòu)模式是一種n層模式,其中組件按照水平層次進(jìn)行組織。這是設(shè)計(jì)大多數(shù)軟件的傳統(tǒng)方法,旨在實(shí)現(xiàn)自我獨(dú)立。這意味著所有組件之間相互連接,但彼此之間不相互依賴。

這種架構(gòu)模式有四個(gè)層,每個(gè)層中的模塊性和組件之間都有連接。從上到下,它們分別是:
展示層:包含與展示相關(guān)的所有類別。
業(yè)務(wù)層:它包含業(yè)務(wù)邏輯。
持久層:用于處理對(duì)象關(guān)系映射等功能
數(shù)據(jù)庫(kù)層:存儲(chǔ)所有數(shù)據(jù)。
在這種情況下,各層是封閉的,也就是說(shuō)請(qǐng)求必須從頂部到底部經(jīng)過(guò)所有層。這樣設(shè)計(jì)有兩個(gè)原因,一個(gè)是將所有"相似"的組件放在一起,另一個(gè)原因是提供層次的隔離。
進(jìn)一步說(shuō)明,將“相似”的組件放在一起意味著與某個(gè)層相關(guān)的所有內(nèi)容都保留在該單一層中。這樣可以清晰地區(qū)分各種組件,并且有助于將相似的代碼集中在一個(gè)位置。通過(guò)隔離各層,它們相互之間變得獨(dú)立。因此,例如,如果我們想將數(shù)據(jù)庫(kù)從Oracle服務(wù)器更改為SQL服務(wù)器,這將對(duì)數(shù)據(jù)庫(kù)層產(chǎn)生重大影響,但不會(huì)影響其他層。同樣,假設(shè)您有一個(gè)自定義的業(yè)務(wù)層,并且想要將其更改為業(yè)務(wù)規(guī)則引擎,如果我們有一個(gè)良好定義的分層架構(gòu),這種更改不會(huì)影響其他層。

分層架構(gòu)模式可以在所提及的層級(jí)之外進(jìn)行修改,增加其他層級(jí)。這被稱為混合分層架構(gòu)。例如,在業(yè)務(wù)層和持久化層之間可以添加一個(gè)服務(wù)層。然而,這并不是理想的設(shè)計(jì),因?yàn)楝F(xiàn)在業(yè)務(wù)層必須經(jīng)過(guò)服務(wù)層才能到達(dá)持久化層。這個(gè)請(qǐng)求通過(guò)服務(wù)層并沒有任何價(jià)值。我們稱之為架構(gòu)陷阱反模式。請(qǐng)求經(jīng)過(guò)各層時(shí),在每個(gè)層中幾乎沒有或沒有執(zhí)行任何邏輯。

唯一解決這個(gè)問題的方法是將可選的層級(jí)設(shè)置為開放層。這意味著如果可選的層級(jí)對(duì)發(fā)送的請(qǐng)求有任何增值作用,請(qǐng)求就會(huì)經(jīng)過(guò)該層級(jí)。如果沒有增值作用,請(qǐng)求將直接繞過(guò)該層級(jí),進(jìn)入相關(guān)的下一層級(jí)。在上圖中可以看到這種情況,請(qǐng)求繞過(guò)了服務(wù)層,從業(yè)務(wù)層直接進(jìn)入持久化層。
然而需要注意的是,通過(guò)設(shè)置開放層,我們削弱了層級(jí)之間獨(dú)立的好處。如果我們想替換持久化層,就必須考慮到開放的服務(wù)層和業(yè)務(wù)層。這兩個(gè)層級(jí)現(xiàn)在都與持久化層耦合在一起。因此,雖然向系統(tǒng)中添加開放層非常容易,但我們不允許這種情況發(fā)生。我們必須在不損害架構(gòu)的情況下解決問題。
結(jié)論
分層架構(gòu)是最簡(jiǎn)單的軟件架構(gòu)模式。如果要設(shè)計(jì)一個(gè)基本的應(yīng)用程序,用戶數(shù)量很少(<100-200),并且在投入使用后不會(huì)有太多的需求變化,那么這是最好的軟件架構(gòu)模式。與其他模式相比,這種架構(gòu)模式的實(shí)現(xiàn)成本非常低。
以下是分層架構(gòu)模式的優(yōu)劣分析。
優(yōu)點(diǎn)
這種架構(gòu)模式易于測(cè)試,因?yàn)榻M件屬于特定的層級(jí)。因此,它們可以單獨(dú)測(cè)試。
由于大多數(shù)應(yīng)用程序自然而然地按層級(jí)工作,所以這種架構(gòu)模式簡(jiǎn)單易實(shí)現(xiàn)。
缺點(diǎn)
盡管可以對(duì)特定層進(jìn)行更改,但這并不容易,因?yàn)閼?yīng)用程序是一個(gè)單一的單元。而且,層之間的耦合關(guān)系往往會(huì)增加難度。這也使得擴(kuò)展變得困難。
它必須作為一個(gè)單一的單元部署,因此對(duì)特定層的更改意味著整個(gè)系統(tǒng)必須重新部署。
它的規(guī)模越大,請(qǐng)求經(jīng)過(guò)多個(gè)層級(jí)所需的資源就越多,從而導(dǎo)致性能問題。





























