DDD理論學習系列(3)-- 限界上下文
1. 引言
限界上下文可以拆分為兩個詞,限界和上下文。
限界:是指一個界限,具體的某一個範圍。
上下文:個人理解就是語境。
比如我們常說的段子:
“我想靜靜。”
這個句子一般是想表達“我想靜一靜”的意思。但是我們卻把它玩笑成“靜靜是誰?”。
可見上下文語境很重要。
這個例子只是個開胃菜,我們接著往下看。
2. 案例分析
整個應用程式之內的一個概念性邊界。
邊界之內的每種領域術語、片語或句子--也即通用語言,都有確定的上下文含義。
邊界之外,這些術語可能表示不同的意思。
每次看到這種解釋就頭大。我們還是結合我們的案例來聊一聊吧。
根據上一節對領域的剖析,我們把案例主要拆分成幾個子域,其中銷售子域是核心域,商品子域和物流子域為支撐子域。在這三個子域中,都要和商品打交道。如果把商品抽象為Product物件的話,按我們一般的常規思路(拋開子域的劃分)來說,不管是商品銷售還是發貨,我們都可以共用同一個Product物件。
但在DDD中,在商品子域和銷售子域中,可以共享這個Product物件,但在物流子域,就有點大材小用。為什麼呢?因為畢竟物流子域關注的是商品的發貨處理和物流跟蹤。針對發貨流程而言,我只關心商品的數量、大小、重量等規格,而不必瞭解商品的價格等其他資訊。所以說物流子域應該關注的是貨物的發貨處理而不是商品。
那為什麼我們之前的開發思路會共用同一個Product物件呢?
答案很簡單,沒有進行領域的劃分。把整個專案一概而論,統一建模導致的結果。
在DDD的思想下,當劃分子域之後,每個子域都對應有各自的上下文。在銷售子域和商品子域所在的上下文語境中,商品就是商品,無二義性。在物流子域的上下文語境中,我們也可以說商品的發貨處理,但這時的商品就特指貨物了。確定了真實面目之後,我想我們也會不由自主的抽象一個新的Cargo物件來處理物流相關的業務。這也是DDD帶來的好處,讓我們更清晰的建模。
3. 限界上下文的命名
限界上下文只是一個統一的命名,在我們劃分子域後,每個子域一般對應一個上下文,也可以對應多個上下文。但如果子域對應多個上下文的時候,就要考慮一下是不是子域能否繼續劃分。
命名方式很簡單,領域名+上下文。
比如我們的銷售子域對應銷售上下文,物流子域對應物流上下文。
4. 總結
透過我們上面的舉例分析,限界上下文也並不是一個高深的概念。
用官話來說限界上下文主要用來封裝通用語言和領域物件。
按我個人的理解它就是用來為領域提供上下文語境,保證在領域之內的一些術語、業務相關物件等(通用語言)有一個確切的含義,沒有二義性。
參考資料
In a perfect world, each bounded context has its own models/entities. You wouldn't relate models/entities across bounded contexts. Instead, model x from boundary y, would communicate with boundary z via some sort of api.
This ensures a clear distinction between contexts and removes dependencies. The great benefit of this is, if you have a large application, you can segregate parts of your application to not be critically based on other parts of the application, particularly between businesses.
As a rather obvious example - you don't connect with Facebook's user records - it's a completely different context. You consume the API they provide in order to get the information you need. Think of your application in the same way. When you consume their service, you'd actually write a repository or something that would manage those queries, and code in protection mechanisms in case something goes wrong.
作者:聖傑
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/758/viewspace-2819885/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- DDD中限界上下文與通用語言的作用
- 學習DDD的初步嘗試,從最基礎的開始,業務介紹,劃分限界上下文 ,建立模型模型
- 資訊理論理論學習筆記筆記
- 機器學習系列文章:貝葉斯決策理論機器學習
- DDD是不是過度工程理論?
- 分散式理論學習分散式
- 深度學習相關理論深度學習
- 深度學習-理論學習關鍵示意圖深度學習
- 戲說領域驅動設計(七)——限界上下文——延伸
- 快照隔離的理論學習
- 資訊理論-Turbo碼學習
- 鑑權理論知識學習
- 深入學習js之——執行上下文棧#3JS
- 跨越DDD從理論到工程落地的鴻溝
- 戲說領域驅動設計(六)——限界上下文——設計
- DDD悖論:DDD是不是銀彈?
- DDD中BoundedContext視為有限上下文更好Context
- SpringMVC學習系列(10) 之 異常處理SpringMVC
- 聊聊 AI 學習入門 - 數學和資訊理論AI
- 決策樹在機器學習的理論學習與實踐機器學習
- 學習真DDD的最佳路徑
- 重學JavaScript(3)--執行上下文JavaScript
- DDD設計工具:上下文對映器ContextMapperContextAPP
- 從資訊瓶頸理論一瞥機器學習的“大一統理論”機器學習
- 機器學習-學習率:從理論到實戰,探索學習率的調整策略機器學習
- 【機器學習】Logistic Regression 的前世今生(理論篇)機器學習
- 機器學習入門(二) — 迴歸模型 (理論)機器學習模型
- 關於“學習金字塔理論”的所思所想
- Causal Inference理論學習篇-Tree Based-Causal ForestREST
- Causal Inference理論學習篇-Tree Based-Causal Tree
- 李巨集毅GAN學習(四)GAN的基本理論
- 強化學習理論-第1課-基礎概念強化學習
- orientDB學習筆記(一)六度分隔理論筆記
- 《實現領域驅動設計》筆記——領域、子域和限界上下文筆記
- 機器學習導圖系列(3):過程機器學習
- 同步上下文SynchronizationContext學習筆記Context筆記
- DDD學習(二)—— 領域建模重要概念
- 強化學習之蒙特卡洛學習,時序差分學習理論與實戰強化學習