領域驅動設計(DDD)裡面有一堆專業術語,比如領域、子域、核心域、通用域、支撐域等等,聽著是不是覺得挺嚇人?別怕,我來帶你輕鬆搞懂它們。
如何理解領域和子域?
領域是指一定的業務範圍或問題域。在解決業務問題時,DDD 會將業務領域進行細分,將問題範圍限定在一定的邊界內,在這個邊界內建立領域模型,用程式碼實現這些領域模型,解決相應的業務問題。實際上,核心思想就是分而治之。
領域可以進一步劃分為子域,每個子域對應一個更小的問題域或業務範圍。
DDD 本質上是一種處理複雜領域的設計方法,它試圖透過不斷的細分,使業務從複雜變得簡單,更容易理解,技術實現也更容易。
就像一個公司裡面有不同級別的部門一樣。例如,一家網際網路創業公司,有產品研發部、市場營銷部、客戶服務部等。
領域相當於公司中的一個大部門,比如產品研發部。這個部門負責產品的設計與研發,確定公司的主要業務方向和策略。
子域就像是大部門下的小團隊,例如在產品開發部下,可能會有產品團隊、前端團隊、後端團隊、測試團隊等。每個子域團隊專注於更具體的任務,但都是為了支撐上級部門的目標而設立的。
透過這樣的分級,公司可以確保每個部門、每個團隊甚至每個小組都有明確的責任和目標,讓公司的運作更加有序和高效。
同樣,在DDD中透過劃分領域、子域,可以幫助軟體研發團隊更好地理解和處理複雜的業務需求,每個層級關注不同的細節,但共同協作完成整個系統的開發。這樣不僅提高了開發效率,還能確保軟體能夠準確地滿足業務需求。
如何理解核心域、通用域和支撐域?
在領域劃分的過程中,子域可以根據其重要性和功能屬性劃分為核心域、通用域和支撐域。
核心域決定產品和公司核心競爭力,通用域是被多個子域使用的通用功能域,支撐域是支撐業務的運轉而存在,但不能決定產品和公司核心競爭力,也不包含通用功能。
劃分核心域、支撐域和通用域的主要目標是聚焦關鍵事項,透過領域劃分,區分不同子域在公司內的重要性,讓公司更有效地分配資源和關注度,確保能在激烈的市場競爭中保持優勢。
例如,以電商領域為例,常見的子域包括:商品子域、訂單子域、使用者子域、支付子域、物流子域、客服子域、資料分析子域。
在電商領域,核心域是直接與業務的核心價值和主要收入相關的領域。通常包括:
- 商品子域:管理商品資訊,包括商品展示、分類、搜尋和推薦等,是電商平臺的基礎。
- 訂單子域:處理訂單的建立、修改、查詢和狀態管理等,是完成交易的關鍵環節。
- 支付子域:處理支付事務,包括支付方式管理、支付狀態跟蹤、支付渠道對接等,是完成交易的另一個關鍵環節。
通用域是支援業務運作的領域,它的能力可以在多個業務領域中使用:
- 使用者子域:管理使用者資訊,包括使用者註冊、登入、資料編輯等。雖然使用者管理在很多系統中很重要,但在電商系統中,它更多地是支援核心業務流程。
支撐域是指那些為核心域和通用域提供支援的領域,通常涉及基礎設施、運營管理、不直接關聯收入的領域:
- 物流子域:處理商品的配送,包括物流公司管理、配送狀態跟蹤等,是確保商品成功送達消費者的關鍵環節。
- 客服子域:提供客戶支援,包括諮詢、投訴處理等,幫助解決使用者在使用過程中遇到的問題。
- 資料分析子域:分析業務資料,包括使用者行為分析、銷售資料分析等,支援決策制定和業務最佳化。
總結
領域的核心思想是將問題域逐級細分,降低業務理解和系統實現的複雜度。
核心域、通用域和支撐域則是子域的進一步分類。核心域是產品和公司的核心競爭力,通用域是被多個子域使用的能力,支撐域是支撐業務運轉的領域。這種劃分有助於理解和處理複雜的業務需求,提高開發效率,確保軟體滿足業務需求。