
第4章:架構(gòu)
拆書稿
一、架構(gòu)模式與架構(gòu)風(fēng)格
分層
- 定義說明
將領(lǐng)域模型和業(yè)務(wù)邏輯分離出來,并減少對基礎(chǔ)設(shè)施、用戶界面甚至應(yīng)用層的依賴,因為他們不屬于業(yè)務(wù)邏輯。每層都應(yīng)該具有良好的內(nèi)聚性,并且只依賴于比其自身更低的層。
- 一個典型的傳統(tǒng)分層架構(gòu)
用戶接口層
應(yīng)用層
領(lǐng)域?qū)?br> 基礎(chǔ)設(shè)施層
- 依賴倒置原則
定義:
高層模塊不應(yīng)該依賴于低層模塊,兩者都應(yīng)該依賴于抽象。抽象不應(yīng)該依賴于細節(jié),細節(jié)應(yīng)該依賴于抽象。
六邊形架構(gòu)
- 定義說明
該架構(gòu)中存在兩個區(qū)域,分別是"外部區(qū)域"和"內(nèi)部區(qū)域"。
- 外部區(qū)域:不同的客戶均可以提交輸入;
- 內(nèi)部區(qū)域:用于獲取持久化數(shù)據(jù),并對程序輸出進行存儲(數(shù)據(jù)庫),或者在中途將輸出轉(zhuǎn)發(fā)到另外的地方(消息);
外部與內(nèi)部之間通過適配器對輸入轉(zhuǎn)化,每個客戶端都有自己的適配器。
- 注意點
根據(jù)用例來設(shè)計應(yīng)用程序,而不是根據(jù)需要支持的客戶數(shù)目來設(shè)計。
面向服務(wù)架構(gòu)(SOA)
服務(wù)設(shè)計原則
- 服務(wù)契約
通過契約文檔,服務(wù)闡述自身的目的與功能
- 松耦合
服務(wù)將依賴關(guān)系最小化
- 服務(wù)抽象
服務(wù)只發(fā)布契約,而向客戶隱藏內(nèi)部邏輯
- 服務(wù)重用性
一種服務(wù)可以被其他服務(wù)所重用
- 服務(wù)自治性
服務(wù)自行控制環(huán)境與資源以保持獨立性,這有助于保持服務(wù)的一致性和可靠性
- 服務(wù)無狀態(tài)性
服務(wù)負責(zé)消費方的狀態(tài)管理,這不能與服務(wù)的自治性發(fā)生沖突
- 服務(wù)可發(fā)現(xiàn)性
客戶可以通過服務(wù)元數(shù)據(jù)來查找服務(wù)和理解服務(wù)
- 服務(wù)組合性
一種服務(wù)可以由其他的服務(wù)組合而成,而不管其他服務(wù)的大小和復(fù)雜性如何
SOA精神所在
- 業(yè)務(wù)價值高于技術(shù)策略
- 戰(zhàn)略目標(biāo)高于項目利益
RESTful
資源、無狀態(tài)通信、自描述功能、封裝行為
CQRS - 命令和查詢職責(zé)分離
事件驅(qū)動架構(gòu)
管道和過濾器
讀后思考
其實首先要改變的是我們平時開發(fā)的思維模式
編碼時,通常用兩種工作流程:
- 自底向上
先設(shè)計數(shù)據(jù)模型,比如關(guān)系型數(shù)據(jù)庫的表結(jié)構(gòu),再實現(xiàn)業(yè)務(wù)邏輯。在平時開發(fā)同學(xué)拿到開發(fā)需求后,開始的第一件事情就是:"讓我先把數(shù)據(jù)庫表字段設(shè)計出來吧"。這基本就是大多數(shù)開發(fā)同學(xué)在設(shè)計階段做的事情了。這種方式就是將關(guān)注點優(yōu)先放在了技術(shù)性的數(shù)據(jù)模型上了,而不是代表業(yè)務(wù)的領(lǐng)域模型。
- 自頂向下
拿到業(yè)務(wù)需求,先和客戶方確定好請求數(shù)據(jù)格式,設(shè)計好請求RESTFUL URL,在實現(xiàn)Controller和service,然后在實現(xiàn)領(lǐng)域模型,最后在來考慮數(shù)據(jù)庫表持久層的設(shè)計。