軽量DDDと戦略的設計とその間(DDD)

参考書籍一覧(Amazon アソシエイトリンク)

DDDに言及される時、戦術的設計のみを適用した軽量DDDはだめで戦略的設計が本当のDDDといったニュアンスの発言がなされることが多い。戦略的設計はエリック・エヴァンスのドメイン駆動設計も出てくるが、戦術的設計は実践ドメイン駆動設計でのみ出てくる言葉である。

戦術的設計のみを適用した軽量DDDは簡単にいえば、DDDのエンティティやバリューオブジェクト、サービスなどのコードパターンを適用しただけの設計を指す。カーゴカルトの一種と言える。

対して、戦略的設計はコンテキストやコアドメインを意識した設計を行うことを指す。実践ドメイン駆動設計がマイクロサービスを例に戦略的設計こそDDDの本質と言わんがごとくの論調で書かれているせいで、DDDとはマイクロサービスで適用するものとか大規模システムでしか使い所がないものというような認識を持っている人もいる。

個人的にはこういった認識が存在するのは有害だと考えている。確かに軽量DDDをDDDと称するのは間違っているが、分析モデルとコードが対応するように分析設計する(つまり、モデル駆動設計を行う)のがDDDの核で、戦略的設計を意識する必要のない規模のシステムであってもDDDを実践することはできる。

なので、DDDを実践するという意味においては、私は戦術的設計ができてモデル駆動設計ができるようになれば良いと考える。戦略的設計は分散システム設計やマイクロサービス、チーム運営などの別の情報源を当たった方が良いのではないかと考えている。

モデル駆動設計のイメージができないなら、要求分析とオブジェクト指向分析設計に関する書籍を当たるのが良いだろう。