Open2

実践ドメイン駆動設計を読んでいる

tan_go238tan_go238

DDDへの誘い

DDDには戦略的モデリングと戦術的モデリングの両方のためのツールが用意されているらしい。
具体的に何が戦略的モデリングで何が戦術的モデリングか記載がないので文脈を読みつつ、それらしいのを列挙してみる。

戦略的モデリング

  • ドメイン
  • サブドメイン
  • 境界づけられたコンテキスト

戦術的モデリング

  • エンティティ
  • 値オブジェクト
  • 集約

境界づけられたコンテキスト内でのモデリングは、戦術的に行う。
このとき使うパターンの一つが 集約

なぜDDDをするのか

  • 業務側の視点を踏まえたソフトウェア開発ができるようになる
  • 設計がコードであり、コードが設計になる

DDDがどのように役立つのか

  • 現実のままモデリングするのではなく業務に役立つモデルを作ることで、ドメインエキスパートと開発者が共同でユビキタス言語を確立し、より密接なチームを作ることができる
  • 戦略的な判断に関心を向けることで、チームをまたがる組織的関係や事業の境界を定める助けになる
  • ドメインエキスパートのメンタルモデルを正確に踏まえたソフトウェアを作れる

ユビキタス言語

ドメインエキスパートやソフトウェア開発者を含めたチーム全体で作り上げる共有言語のこと。
シンプルな定義をまとめた用語集を作る。
ユビキタスであるが、ユニバーサルではない。ユビキタスになるのは、あくまでも個別の境界づけられたコンテキスト内。
別の境界づけられたコンテキストが絡んできた場合は、その統合に コンテキストマップ を使う。

tan_go238tan_go238

ドメイン、サブドメイン、境界づけられたコンテキスト

ドメインとは何か

ドメインという言葉は何を表すかは曖昧。
事業全体を指すこともあれば、コアドメインやサブドメインを表すことがある。
DDDの最終目標は複数のサブドメインをお組み合わせて、組織の全てのドメインを作り上げること。

コアドメインとは何か

価値があって重要で、見返りが一番大きなところ。
本書内では以下のような記載がある。

境界づけられたコンテキストをコアドメインとして育てていくなら

コアドメインとサブドメインに分かれている訳ではなく、複数のサブドメインが含まれていそうでもある。

サブドメイン、境界づけられたコンテキスト

サブドメインも境界づけられたコンテキストも境界を定義している。
特にモデリングにおいて 言葉の境界 は重要。
DDDの先着的設計ツールを使えば、実際の機能にもとづいたサブドメインへの切り分け、論理的サブドメイン間の繋がりの図示、物理的な境界づけられたコンテキストの統合ができるようになる。

サブドメインとは何か

文脈的にサブドメインは コアドメイン 支援サブドメイン 汎用サブドメイン に分けられる模様。
サブドメインと境界づけられたコンテキストはどちらがどちらを内包するという訳ではなさそう。
図2-1では境界づけられたコンテキストがサブドメインを内包しているが、図2-2では逆になっている。

境界づけられたコンテキストとは何か

コンテキスト境界を意識する。
境界づけられたコンテキストを意識せずに詳細ばかり見てしまうと本来異なるはずのコンテキストをゴチャ混ぜにしてしまう。

例えば、 フォーラム で知っておくべきことは「投稿者が今何をやっているか」「これまで何をやってきていたか」である。フォーラムに投稿する権限があるかは 認証・権限 コンテキストの関心事。