原文:https://herbertograca.com/2017/09/21/onion-architecture/
這篇文章是軟件架構(gòu)編年史(譯)的一部分,這部編年史由一系列關(guān)于軟件架構(gòu)的文章組成漠畜。在這一系列文章中风题,我將寫下我對軟件架構(gòu)的學(xué)習(xí)和思考茸苇,以及我是如何運(yùn)用這些知識的。如果你閱讀了這個系列中之前的文章,本篇文章的的內(nèi)容將更有意義应媚。
2008 年 Jeffrey Palermo 提出了洋蔥架構(gòu)珊泳。在我看來鲁冯,它在端口和適配器架構(gòu)的基礎(chǔ)上貫徹了將領(lǐng)域放在應(yīng)用中心,將傳達(dá)機(jī)制(UI)和系統(tǒng)使用的基礎(chǔ)設(shè)施(ORM色查、搜索引擎薯演、第三方 API...)放在外圍的思路。但是它前進(jìn)了一步秧了,在其中加入了內(nèi)部層次跨扮。
我們從通常擁有四個層次(表現(xiàn)層、應(yīng)用層示惊、領(lǐng)域?qū)雍酶邸⒊志没瘜?的分層架構(gòu)發(fā)展到了端口和適配器架構(gòu),它只是含蓄地提到了兩個同心圓層次:
- 代表傳達(dá)機(jī)制和基礎(chǔ)設(shè)施的外層米罚;
- 代表業(yè)務(wù)邏輯的內(nèi)層钧汹。
端口和適配器架構(gòu)與洋蔥架構(gòu)有著相同的思路,它們都通過編寫適配器代碼將應(yīng)用核心從對基礎(chǔ)設(shè)施的關(guān)注中解放出來录择,避免基礎(chǔ)設(shè)施代碼滲透到應(yīng)用核心之中拔莱。這樣應(yīng)用使用的工具和傳達(dá)機(jī)制都可以輕松地替換碗降,可以一定程度地避免技術(shù)、工具或者供應(yīng)商鎖定塘秦。
另外讼渊,它還有著脫離真實(shí)基礎(chǔ)設(shè)施和傳達(dá)機(jī)制應(yīng)用仍然可以運(yùn)行的便利,這樣可以使用 mock 代替它們方便測試尊剔。
然而爪幻,洋蔥架構(gòu)還告訴我們,企業(yè)應(yīng)用中存在著不止兩個層次须误,它在業(yè)務(wù)邏輯中加入了一些在領(lǐng)域驅(qū)動設(shè)計的過程中被識別出來的層次:
此外挨稿,它明確了端口和適配器架構(gòu)中關(guān)于依賴方向的暗示:
- 外層依賴內(nèi)層;
- 內(nèi)層對外層無感知京痢。
也就是說耦合的方向是從外層指向中心奶甘,它提供了一個完全獨(dú)立的對象模型(領(lǐng)域模型),該模型位于架構(gòu)的核心祭椰,不依賴其它任何層次臭家。我們擁有了在不影響內(nèi)層的情況下改變外層的靈活性。它在架構(gòu)層面運(yùn)用了依賴倒置原則方淤。
洋蔥架構(gòu)的關(guān)鍵原則:
- 圍繞獨(dú)立的對象模型構(gòu)建應(yīng)用
- 內(nèi)層定義接口钉赁,外層實(shí)現(xiàn)接口
- 依賴的方向指向圓心
- 所有的應(yīng)用代碼可以獨(dú)立于基礎(chǔ)設(shè)施編譯和運(yùn)行
—— Jeffrey Palermo 2008, The Onion Architecture: part 3
還有,任何一個外部層次都可以直接調(diào)用任何一個內(nèi)部層次臣淤,這樣既不會破壞耦合的方向橄霉,也避免了僅僅為了追求分層模式而創(chuàng)建一些沒有任何業(yè)務(wù)邏輯的代理方法甚至代理類。這和 Martin Flowler 表達(dá)的偏好一致邑蒋。
[…] 上層可以使用它們下面的任意層次姓蜂,而不僅僅是它們直接的下層∫降酰——Jeffrey Palermo 2008, The Onion Architecture: part 3
總結(jié)
洋蔥架構(gòu)在端口和適配器架構(gòu)的基礎(chǔ)之上增加了一些的應(yīng)用業(yè)務(wù)邏輯的內(nèi)部組織钱慢,這些組織基于領(lǐng)域驅(qū)動設(shè)計的概念劃分的。
這又是一次職責(zé)分離的更深入的演化卿堂,帶來了高內(nèi)聚低耦合束莫,反過來也帶來了更好的可測試性和可維護(hù)性。
引用來源
2002 – Martin Fowler – Patterns of Enterprise Application Architecture
2008 – Jeffrey Palermo – The Onion Architecture: part 1
2008 – Jeffrey Palermo – The Onion Architecture: part 2
2008 – Jeffrey Palermo – The Onion Architecture: part 3
2013 – Jeffrey Palermo – The Onion Architecture: part 4 – After Four Years