ddd的基本概念澄清
目錄
什麼是ddd
ubiquitous language (通用語言)
layered architecture(分層架構)
entity(實體)
value ojbect(值物件)
service(服務)
module(模組)
aggregate(聚合)
factory(工廠)
repository(倉庫)
specfication(規格)
bounded context(界限上下文)
實現步驟:
•domain driven design
•領域是軟體要解決的問題區域
•通過對領域知識建立模型,形成團隊內各成員的通用語言,指導設計和實現,從而達到為客戶解決問題的目的
•當領域模型發生改變時,開發人員需要重構,以便反映模型的變化,這樣新知識就合併到軟體中
•將領域模型作為語言的支柱
•領域模型包括類和主要操作的名稱
•領域模型盡量以文字為主,穿插簡化圖為說明
•不管是畫圖、寫文件、寫**還是講話,都用的同一種術語
•語言是演進的
* 用分層來隔離領域
* 層中的任何元素都僅依賴於本層其他元素,或其下層元素。
* 高內聚,低耦合
* 領域層應重點放在如何表達領域模型上,而不需要考慮自己的顯示和儲存問題
•使用者介面層
•向使用者顯示資訊,解釋使用者命令
•應用層
•盡量簡單,不包含業務規則或知識
•只為下層的領域物件分配任務,使他們協作
•領域層
•負責表達業務概念,業務狀態資訊和業務規則
•基礎設施層
•上面各層提供通用的技術。比如持久化
•由標識定義的物件,而不是屬性
•整個生命週期都有聯絡性
•模型必須定義出「符合什麼條件才算是相同的事物」
•描述領域的某個方面,但本身沒有概念標識的物件
•關心它們是什麼,而不關心它們是誰
•值物件是不可變的,具體實現分為共享和複製
•領域操作(活動或者物件)
•定義能夠為客戶做什麼,是動詞而不是名詞
•操作是無狀態的
•結果和引數應該是領域物件
•是否包含業務規則來確定是應用還是領域service
•可以檢視細節,而不會被整個模型淹沒
•可以觀察module相互之間的關係,而不考慮細節
•將相同職責的物件放在一起
•作為資料修改的單元,一組相關物件的集合
•包括乙個根(root)和乙個邊界(boundary)
•根是aggregate內乙個特定的entity
•boundary定義了aggregate內有哪些
•外部引用時,只可引用根;而邊界內部的物件之間可以相互引用
•物件本身承擔大量的職責,讓複雜物件建立自身,會職責過載導致問題
•將職責交給客戶物件建立,會導致客戶必須了解物件內部規則,導致和領域類產生耦合
•factory隱藏建立細節,通常和aggregate有關
•當建立新物件未滿足固定規則時,factory應拒絕建立物件
•同一型別的物件的集合
•具有複雜的查詢、新增和刪除物件功能
•只為那些確實需要直接訪問的aggreagte提供repository,而不是所有物件都提供
•計算結果是真或者假的函式,一般用動詞或形容詞
•用於驗證物件是否滿足特定的業務規則
•用於repository查詢物件是否滿足要求
•用於建立物件時是否滿足需求
•大型專案都會存在多個模型
•權利上的劃分和管理級別的不同也可能要求模型分開
•標記不同模型之間的邊界和關係
•邊界內部嚴格保持模型的一致性
•防止重複的概念和假同源
•根據需求建立乙個初步的領域模型,識別出一些明顯的領域概念以及它們的關聯
•分析程式功能,識別出應用層和領域層的職責
•識別entity,value object,service等
•找出aggregate root
•為aggregate寫repository
•走查場景,分析領域模型是否解決業務需求
•考慮建立entity,value object,aggregate等是用factory還是構造,又或者是ioc
•重構模型
nginx基本概念介紹
1 nginx主要為優化效能,是一種反向 服 負載均衡務器。有報告表明能支援高達 50,000 個併發連線數。反向 伺服器 nginx 最常的用途是提供反向 服務,那麼什麼反向 呢?正向 相信很多大陸同胞都在這片神奇的土地上用過了,原理大致如下圖 伺服器作為客戶端這邊的中介接受請求,隱藏掉真實的客戶...
Spring基本概念介紹
spring的概述 spring是乙個開源的控制反轉 inversion of control,ioc 和面向切面 aop 的容器框架,它的主要目得是簡化企業開發而建立的。從上面的簡要介紹中,我們要知道spring的核心有兩部分 ioc 控制反轉 所謂控制反轉就是應用本身不負責依賴物件的建立及維護,...
Rabbit MQ基本概念介紹
rabbitmq介紹 rabbitmq是乙個訊息中介軟體,是乙個很好用的訊息佇列框架,這裡有幾個關鍵的名詞 connectionfactory connection channel都是rabbitmq對外提供的api中最基本的物件。connection是rabbitmq的socket鏈結,它封裝了s...