網路城邦
上一篇 回創作列表 下一篇   字體:
領域驅動設計之我見
2021/04/26 08:24:14瀏覽570|回應0|推薦4
最近國泰金控發表數位轉型的成果,在五年前就開始規劃重新設計核心系統,傳統銀行遭遇網路銀行的挑戰特別大,如何有效的增加新服務,而且不會影響到就服務是一大挑戰。國泰金控的資訊系統都是自行開發的,所以加上中台 (Middle Platform) 是最佳選擇,連金融業都可以接受分散式系統的最終一致性,確實是好消息。

在設計新一代系統時,國泰金控引進事件風暴 (Event Storming) 手法,結合領域專家和資訊開發人一起開會討論,形成統一語言(Ubiquitous Lanaguage),這個思想和以往不同之處在於放棄統一字典的想法,以領域(Domain) 為中心,只要在單一個領域中統一既可,畢竟金融和保險真是不同領域。

事件風暴的主要用途是在辨認出領域的邊界上下文( Boundary Context ),這個思想和以往不同之處在於由上而下設計,而不是由下而上設計,在傳統上,系統分析師在釐清需求後就會開出 ER 模型 (Entity Relationship Model),完全以關聯式資料庫為中心,加上 IDE 工具( VB, Delphi, ..etc.) 的推波助漲,形成許多貧血式模型(Anemic Domain Models from Martin Fowler),只有一大堆空殼的 get, set 呼叫功能,完全沒有商業邏輯在裡面。應該要將商業邏輯放入值物件( Value Object ) 和領域服務 ( Domain Service ) 中。

領域驅動設計區分為問題領域(Problem Domain) 和解決方案領域(Solution Domain),它是以事件驅動(Event Driven)為主軸,著重在動詞,而不是名詞 (Entity) 上面。使用案例(Use Cases) 還是很有用的,它還是基於物件導向(Object Oriented) 和敏捷式開發(Agile Development) 基礎上發展,不是要取代它們。

在設計行為上分為兩大部分: 戰略設計(Strategic Design) 和戰術設計(Tactical Design),中間以統一語言和領域模型 (Domain Model) 為介面,確保雙方的一致性。 戰略設計的主要目標是找到核心領域 (Core Domain),由老練的設計師來負責,以便確保品質,另一方面也是要掌握核心能力,不要將核心領域外包出去。傳統上以分層架構(Layer Architecture)為主,經過多年的發展,包括六角形,洋蔥型和簡潔形(Clean Architecture) 等新架構出現,在應用設計上更加好上手。

在傳統上,我們會畫系統架構圖 (System Diagram),現在換成上下文圖(Context Mapping Diagram),領域取代系統將會更細緻化,將一些 B2B 介面都用上了,還是沿續 SOA (Service Oriented Architecture) 原則。當然也可以應用在微服務架構( Micro Service Architecture, MSA) 上面,一個微服務就像一個獨立自主的領域。

在戰術設計方面,以柔性設計(Supple Design) 為主,其實軟體是很硬的東西,需要經過不斷的重構(Refactoring) 才會變軟,這就需要使用到許多物件導向技術,尤其是在模型設計 (Design Pattern) 方面。經過多年的發展,已經有不少有用的模型出現,包括事件源 (Event Sourcing)和 CQRS (Command Query Responsibility Segregation) 來確保交易的有效性和一致性。
( 創作散文 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=robertyjlai&aid=162072235