軽量DDD(Lightweight DDD)というアンチパターンを知った
軽量DDDとはDDDにおける戦術的設計だけ導入し、戦略的設計を省いたDDDのアンチパターンのことをいうらしい
つまり、Entity、Value Object、Domain Serviceなどの具体的な実装パターンだけ導入する手法とのこと
戦略的設計なしでは、適切なドメイン境界を設定できず、責任の所在が曖昧になると思うのだが、そういう名前がついているくらいだから存在するみたい
戦略的と戦術的の設計レベルを整理すると以下
戦略的設計(Strategic Design) - サブドメインの識別と分割 - 境界づけられたコンテキスト(Bounded Context) - コンテキストマップ - ドメインエキスパートとのユビキタス言語構築
戦術的設計(Tactical Design) - Entity、Value Object、Aggregate - Domain Service、Repository - Factory、Specification - ドメインイベント
戦術的設計だけに陥る原因
どういう流れで軽量DDDになってしまう(言われてしまう)のか調べてみた
- 即効性への過度な期待: 短期的成果を求める心理
- 学習コストの回避: 戦略的設計の習得を避ける傾向
- 組織的制約: ドメインエキスパートとの協働体制の欠如
- 技術者中心思考: ビジネス視点の軽視
どれもエンジニアが協業せずに技術だけ(どう責務を分けようかだけ)に向き合っていると陥りそうと感じた
軽量DDDは、ドメイン駆動設計の本質を理解せずに表面的な改善を求める危険なアプローチとわかった