實現領域驅動設計----第三、四章


上下文映射圖主要幫助我們從解決方案空間的角度看待問題。

  • 防腐層(Anticorruption Layer):在集成兩個審計良好的限界上下文時,翻譯層可能很簡單,甚至可以很優雅地實現。但是,當共享內核,合作關係或客戶方-供應方關係無法順利實現時,此時地翻譯將變得複雜。對於下游客戶來說,你需要更具自己地領域模型創建一個單獨地層,該層作爲上游系統地委派向你地系統提供功能。防腐層通過已有地接口與其他系統交互,而其他系統只需要做很小地修改,設置無須修改。在防腐層內部,它在你自己的模型和他方模型之間進行翻譯轉化。
  • 開放主機服務(open Host Service):定義一種協議,讓你的子系統通過該協議來訪問你的服務。你需要將該協議公開,這樣任何想與你集成的人都可以使用該協議。在有新的集成需求時,你應該對協議進行改進或者擴展。對於一些特殊的需求,你可以採用一次性的翻譯予以處理,這樣可以保持協議的簡單性和連貫性。
  • 發佈語言(Published Language):在兩個限界上下文之間翻譯模型需要一種公用的語言。此時你應該使用一種發佈出來的共享語言來完成集成交流。發佈語言通常與開放主機服務一起使用。


在這裏插入圖片描述

**嚴格分層架構(Strict Layers Architecture)**中,某層只能與直接位於其下方的層發生耦合;

鬆散分層架構(Relaxed Layers Architecture),允許任意上方層與任意下方層發生耦合。

在這裏插入圖片描述

依賴倒置原則

依賴倒置原則(Dependency Inversion Principle,DIP):
高層模塊不應該依賴底層模塊,兩者都應該依賴於抽象。抽象不應該依賴於細節,細節應該依賴於抽象。

六邊形架構(端口與適配器)

我們通常將客戶與系統交互的地方稱爲“前端”;同樣,我們將系統中獲取存儲持久化數據和發送輸出數據的地方成爲“後端”。但是,六邊形架構提倡用一種新的視角來看待整個系統,該架構中存在兩個區域,分別時“外部區域”和“內部區域”。在外部區域中,不同的客戶均可以提交輸入;而內部的系統則用於獲取持久化數據,並對程序輸出進行存儲(比如數據庫),或者在中途將輸出轉發到另外的地方(比如消息)。

面向服務架構


REST

REST和DDD
RESTful HTTP是具有誘惑力的,但是我們並不建議將領域模型直接暴露給外界,因爲這樣會使系統接口變得非常脆弱,原因在於對領域模型的每次改變都會導致對系統接口的改變。要將DDD與RESTful HTTP合併起來使用,我們有兩種方式。
第一種方法是爲系統接口層單獨創建一個限界上下文,再在此上下文中通過適當的策略來訪問實際的核心模型。

另一種方法用於需要使用標準媒體類型的時候。如果某種媒體類型並不用於支持單個系統接口,而是用於一組相似的客戶端-服務端交互場景,此時我們可以創建一個領域模型來處理每一種媒體類型。

第一種方法比較適合更加專屬的系統,而第二種方法更適合那些通用的系統。

爲什麼是REST
符合REST原則的系統將具有更好的鬆耦合性。添加新資源並在已有資源中創建到新資源的鏈接是非常簡單的。要添加新的格式同樣如此。另外,基於REST的系統也是非常容易理解的,因爲此時系統被分爲很多較小的資源塊,每個資源塊都可以獨立地測試和調試,並且每一個資源塊都表示了一個可重用地入口點。HTTP設計本身以及URI成熟地重寫與緩存機制使得RESTful HTTP成爲一種不錯地架構選擇,該架構具有很好的鬆耦合性和可伸縮性。

命令和查詢職責分離-----CQRS(Cammand-Query Responsibility Segregation)
從資源庫中查詢所有需要顯示的數據是困難的,特別是在需要顯示來自不同聚合類型與實例的數據時。領域越複雜,這種困難程度越大。CQRS是將緊縮(Stringent)對象(或者組件)設計原則和命令-查詢分離(CQS)應用在架構模式中的結果。

處理具有最終一致性的查詢模型
一種方式是讓用戶界面臨時性的顯示先前提交給命令模型的參數,這使得用戶可以及時地看到將來對查詢模型地改變。這種方式有可能是唯一能夠避免用戶界面顯示陳舊數據地方式。

另一種方法是顯示地在用戶界面上顯示出當前查詢模型的日期和時間。要達到這樣的目的,查詢模型的每一條記錄都需要維護最後更新時的日期和時間。

管道和過濾器

以下的shell命令便是一種最簡單的管道和過濾器:

cat phone_numbers.txt | grep 303 | wc -l

統計在phone——number.txt文件中統計含有電話區號“303”的所有文本行的數量。該命令同時使用了管道和過濾器:

  1. cat命令工具用於向標準輸出流(Standard Output Stream)輸出phone_numbers.txt文件中的內容。標準輸出流與終端相連。在使用“|”符號之後,輸出將會通過管道轉向下一個命令工具。
  2. grep命令從標準輸出流中讀取數據,此時的標準輸出流即是cat命令的輸出結果。grep命令查找到的所有結果都將輸出到標準輸出流。和cat命令一樣,grep命令的輸出流通過管道被轉向到下一個wc命令。
  3. wc命令讀取標準輸出流,命令的參數爲“-l”,表示統計所讀行的數量。此時的輸出直接顯示在了終端,因爲在wc命令之後沒有另外的管道了。



長時處理過程(也叫Saga)
## 數據網織和基於網格的分部署計算

對於緩存冗餘性的工作機制,這裏有一個例子:其中一個節點作爲主緩存,其他節點作爲二級緩存。如果主緩存失效,其中一個耳機緩存將會成爲新的主緩存。當先前失效的主緩存恢復之後,新主緩存中的數據將被複制到恢復後的緩存中,此時該恢復後的緩存將變爲二級緩存。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章