思考と現場の間で

「いいサービスづくり」のために、組織づくりやソフトウェア設計など、考えていることを書きます

【DDDメモ】関連

エリック・エヴァンスドメイン駆動設計 P.81

 現実の世界では、多対多の関連がたくさんあり、その多くはもともと双方向である。【中略】だが、これらの一般的な関連のせいで、実装と保守が複雑になってしまう。しかも、こうした一般的な関連は、そこにある関係の性質について、ほとんど何も伝えないのだ。
 関連をもっと扱いやすくするには、少なくとも3つの方法がある。

  • 関連を辿る方向を強制する
  • 限定しを付加して、多重度を効果的に減らす
  • 本質的ではない関連を除去する

 関係性をできる限り制限することが重要だ。双方向の関連があるということは、両方のオブジェクトが一緒になった時にしか理解できないということを意味している。アプリケーションの要件が双方向に辿ることを求めないなら、一方向にだけ辿るようにすることで、相互依存関係がヘリ、設計がシンプルになる。ドメインを理解することで、本来はどちらの方向性が重要であるのかが、明らかになる場合がある。

 初期のドメインモデルの設計や、クラス設計をすると、業務にある言葉全てをオブジェクトにし、関連を持たせたくなる。現実的には存在するオブジェクトや関連であっても、あくまで目的はあるアプリケーションを手段に価値を提供することだであり、価値を提供できないオブジェクトや関連は存在意義が無い。同時に、そういうオブジェクトが増えてくると複雑化し、本質的なモデルが認識しにくくなる。そういう意味でも、現実に存在したとしても、モデリングは価値を生むオブジェクトや関連に絞るべきだ。