Domain Driven Design: 問題領域與解決領域

Domain Driven Design (DDD) 是一種軟體開發方法,專注於連接軟體的技術實現與其業務需求。這種方法特別重視區分問題領域(Problem
Domain)與解決領域(Solution Domain),以確保軟體解決方案能精準地滿足業務需求。

Problem Domain Vs Solution Domain

問題領域 (Problem Domain/Space)

問題領域涉及發現什麼問題、要解決的問題,即任何想解決的問題。

發現什麼問題、要解決的問題,我們有什麼問題,任何想解決的問題。通常以某個領域裡面知識為前提條件,需要處理或解決的問題。舉例來說,現在要開發一套可以解決人們沒有時間到實體店面進行購物,可以使用網路進行購物,下單物流等。這時候為了解決這問題,我們需要許多購物相關知識,在這個過程中,我們會聚焦於收集與該問題相關的業務知識,以便形成解決方案。

解決領域 (Solution Domain/Space)

如何解決問題,要如何解決,要用什麼工具解決這個問題。在軟體工程就是開發人員熟悉的程式開發,包含用什麼程式語言、資料庫..等等。
關注於如何通過技術手段實現問題領域中識別的需求。這包括選擇和實施技術解決方案,如軟體架構設計、使用什麼資料庫、以及系統開發和部署。在電商平台例子中,解決領域會涉及選擇合適的程式語言、開發框架、資料庫以及實現具體功能的技術細節。

問題領域 vs 解決領域

問題領域和解決領域之間的主要區別在於它們的焦點不同。問題領域專注於“需要解決什麼”,即業務需求;而解決領域專注於“如何解決這些問題”,即技術實現和解決方案。

Domain Driven Design 通過強調這兩個領域的區分和相互作用,幫助團隊避免將業務需求與技術實現混為一談。