名詞與概念

名詞與概念

  • DDD

Domain Driven Design即領域驅動設計

  • CQRS

Command Query Responsibility Seperation(命令查詢職責分離)的縮寫把查詢數據 同程爲 Query (查詢), 只提供根據聚合的ID 進行查詢,查詢結果 以DTO 形式返回改變狀態叫做 Command (命令)   , 提供Create,Update ,Delete 操作

  • 實體(Entity)

許多對象不是由它們的屬性來定義,而是通過一系列的連續性(continuity)和標識(identity)來從根本上定義的。只要一個對象在生命週期中能夠保持連續性,並且獨立於它的屬性(即使這些屬性對系統用戶非常重要),那它就是一個實體。

  • 值對象(Value Object)

當你只關心某個對象的屬性時,該對象便可作爲一個值對象。爲其添加有意義的屬性,並賦予它相應的行爲。我們需要將值對象看成不變對象,不要給它任何身份標識,還應該儘量避免像實體對象一樣的複雜性

  • DTO

Data Transfer Object,數據傳輸對象。與外部系統比如前端、其他應用服務進行交互傳輸的對象

  • DO

Data Object,數據對象。從DB、外圍應用服務等反序列化獲取到並轉換爲本應用服務對象稱之爲DO

  • 序列化與反序列化(Serialize Deserialize)

將外圍系統數據轉爲爲本應用服務DO的過程稱之爲序列化,如:將外部Dubbo接口返回的DTO轉爲本應用服務的DO對象的過程。與之相反的過程稱之爲反序列化。

  • 組裝(Assemble)

用戶接口層(前端)以及其他應用服務查詢本應用服務的數據時,往往需要將各種DO組裝成其所需要的DTO,這個過程稱之爲組裝

  • 聚合(Aggregate)

一組緊密相關的實體共同組成一個聚合的對象

  • 聚合根(Aggregate Root)

聚合對象中唯一一個實體的唯一標識可以整個聚合對象的唯一標識,該實體則爲聚合的根,簡稱聚合根。比如一個訂單聚合對象,包含基本訂單實體、訂單關聯用戶實體、訂單關聯商品實體,用訂單編碼作爲唯一標識,則基本訂單實體爲改聚合對象的聚合根

  • 資源庫(Repository)

領域模型中的對象自從被創建出來後不會一直留在內存中活動的,當它不活動時會被持久化到數據庫中,然後當需要的時候我們會重建該對象;重建對象就是根據數據庫中已存儲的對象的狀態重新創建對象的過程;所以,可見重建對象是一個和數據庫打交道的過程。從更廣義的角度來理解,我們經常會像集合一樣從某個類似集合的地方根據某個條件獲取一個或一些對象,往集合中添加對象或移除對象。也就是說,我們需要提供一種機制,可以提供類似集合的接口來幫助我們管理對象

  • 領域服務(Domain Service)

領域中的一些概念不太適合建模爲對象,即歸類到實體對象或值對象,因爲它們本質上就是一些操作,一些動作,而不是事物。這些操作或動作往往會涉及到多個領域對象,並且需要協調這些領域對象共同完成這個操作或動作。如果強行將這些操作職責分配給任何一個對象,則被分配的對象就是承擔一些不該承擔的職責,從而會導致對象的職責不明確很混亂。但是基於類的面嚮對象語言規定任何屬性或行爲都必須放在對象裏面。所以我們需要尋找一種新的模式來表示這種跨多個對象的操作,DDD認爲服務是一個很自然的範式用來對應這種跨多個對象的操作,所以就有了領域服務這個模式。和領域對象不同,領域服務是以動詞開頭來命名的,比如資金轉帳服務可以命名爲MoneyTransferService。

  • 領域事件(Domain Event)

一個領域事件可以理解爲是發生在一個特定領域中的事件,是你希望在同一個領域中其他部分知道併產生後續動作的事件。但是並不是所有發生過的事情都可以成爲領域事件。一個領域事件必須對業務有價值,有助於形成完整的業務閉環,也即一個領域事件將導致進一步的業務操作。
領域事件可以是業務流程的一個步驟,例如訂單提交,客戶付費100元,訂單完工等。領域事件也可以是定時發生的事情,例如每晚對賬完成。或者是一個事件發生後引發的後續動作,例如客戶輸錯密碼三次後發生鎖定賬戶的事件。

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