防腐層與開放主機服務
目的:降低限界上下文之間的耦合關係
防腐層:(下游限界上下文對 上游限界上下文變化的隔離)
是什麼:設計思想“間接”的一種體現
方法:通過引入一個間接的層,就可以
目的:有效隔離限界上下文之間的耦合
設計模式:間接的防腐層還可以扮演“適配器”的角色、“調停者”的角色、“外觀”的角色
防腐層往往屬於下游限界上下文,用以
目的:隔絕上游限界上下文可能發生的變化。
下游團隊終究可能面臨不可掌控的上游變化。
在防腐層中定義一個映射上游限界上下文的服務接口,就可以將掌控權控制在下游團隊中,
即使上游發生了變化,影響的也僅僅是防腐層中的單一變化點,只要防腐層的接口不變,下游限界上下文的其他實現就不會受到影響。
圖例:
無防腐層:
下游上下文可能存在多處對上游上下文領域模型的依賴,一旦上游發生變更,就會影響到下游的多處實現
有防腐層:
多處依賴轉爲對防腐層的依賴
由防腐層指向上游上下文,形成單一依賴
好處:上游變更時,影響的僅僅是防腐層,下游上下文自身並未受到影響。
防腐層對遺留系統治理:
將遺留系統視爲一個整體的限界上下文,然後爲調用它的下游上下文建立防腐層
在防腐層內:
從調用者角度思考需要公開的服務接口,並引入領域驅動設計爲其提煉出清晰的領域模型,然後再從遺留系統中去尋找對應的實現,慢慢將合適的代碼搬移過來,適時對其重構。
開放主機服務:(上游限界上下文的承諾)
防腐層是下游限界上下文對抗上游變化的利器
開放主機服務就是上游服務用來吸引更多下游調用者的誘餌
實現:定義公開服務的協議,包括通信的方式、傳遞消息的格式(協議)。同時,也可視爲是一種承諾,保證開放的服務不會輕易做出變化。
目的:降低上游與下游限界上下文之間的依賴
發佈/訂閱事件:
事件(消息 解耦):
適用範圍:異步非實時的業務場景
優點:
1 解耦
2 非阻塞特性也使得整個架構具有更強的響應能力