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理論學習系列(9)-- 領域事件事件
- DDD中限界上下文與通用語言的作用
- 學習DDD的初步嘗試,從最基礎的開始,業務介紹,劃分限界上下文 ,建立模型模型
- 資訊理論理論學習筆記筆記
- 老周的ABP框架系列教程 -》 一、框架理論初步學習框架
- 分散式理論學習分散式
- 資訊理論-Turbo碼學習
- 深度學習相關理論深度學習
- 深度學習-理論學習關鍵示意圖深度學習
- 深入學習js之——執行上下文棧#3JS
- 快照隔離的理論學習
- 置換密碼理論學習密碼
- 鑑權理論知識學習
- 深度學習DeepLearning.ai系列課程學習總結:9.深度學習基礎實踐理論深度學習AI
- 深度學習、資訊理論與統計學深度學習
- 關於DDD的學習
- 深度學習DeepLearning.ai系列課程學習總結:7. 深層神經網路理論學習深度學習AI神經網路
- 使用sklearn進行整合學習——理論
- <ddd--領域驅動設計學習>討論--------倉儲
- 聊聊 AI 學習入門 - 數學和資訊理論AI
- 電商大資料學習筆記:理論大資料筆記
- 請教banq DDD學習問題!
- 學習真DDD的最佳路徑
- 【海量資料學院】DBA的學習方法論系列—正確的學習方法
- 重學JavaScript(3)--執行上下文JavaScript
- <ddd--領域驅動設計學習>討論--------分層架構架構
- DDD中BoundedContext視為有限上下文更好Context
- 【海量資料學院】DBA學習方法論系列之:明確的學習目標
- Windows批處理學習(二)——批處理(3)薦Windows
- DDD學習(二)—— 領域建模重要概念
- 《實現領域驅動設計》筆記——領域、子域和限界上下文筆記
- SpringMVC學習系列(10) 之 異常處理SpringMVC
- 關於“學習金字塔理論”的所思所想
- 李巨集毅GAN學習(四)GAN的基本理論
- orientDB學習筆記(一)六度分隔理論筆記
- 淺入淺出深度學習理論與實踐深度學習
- D-S證據理論學習筆記(一)筆記
- 強化學習理論-第1課-基礎概念強化學習