【実践ドメイン駆動設計】第2章 ドメイン、サブドメイン、境界づけられたコンテキスト 読書メモ
ドメイン
組織が行う事業やそれを取り巻く世界のこと。
ドメインモデル
ドメインという単語が含まれているので、 その事業のドメイン全体をカバーする全部入りのモデル、いわゆる「エンタープライズモデル」を一つだけ作るのではなく、事業のドメイン全体の中で特定の部分にだけ注目するための一つの方法。
サブドメイン
複数のサブドメインを組み合わせて、組織のすべてのドメインを作り上げることになる。DDDを使うときには、境界づけられたコンテキストの内部でモデルを開発する。
サブドメインの使い方
- 小売業者により商品オンライン販売を題材にする
- 買い物客に見せる商品カタログが必要
- 注文を受けつけられないといけない
- 販売代金の徴収も必要
- 発送できなければならない
- ここまでで、商品カタログ・注文・請求・発送の四つの主要サブドメインで構成される。
コアドメイン
業務ドメインの一部で、組織を成功に導くために最も重要なもの。戦略的な意味において、そのコアドメインでは他を圧倒しているはず。
支援サブドメイン
業務に不可欠な内容を表しているが、まだ」コアドメインとは言えないようなモデル
汎用サブドメイン
業務上特別なことを何もしていなくても、ソリューション全体として必要なドメインもある。
解決空間と問題空間
ドメインは解決空間と問題空間を持っている。
問題空間
- 解決すべきビジネス戦略上の課題を浮き彫りにするもの
- コアドメインとそこから使う日梅雨のあるサブドメインを合わせたもの
解決空間
- ソフトウェアをどのように実装してその課題を解決するかに注目する
- 境界づけられたコンテキスト
- 特定のソリューションを表すもの
- それを具現化したビュー
境界づけられたコンテキスト
コンテキスト
-
Aドメインのモデルを取り囲む境界づけられたコンテキストの中にある概念は、そのAに関する言語的な関連を持つべき。
-
この本では、境界づけられたコンテキストをモデル名+コンテキストと表現している
-
境界づけられたコンテキストは明示的な境界であり、ドメインモデルがどこに属するかを表すもの。
-
境界を設ける理由は、各モデルの内部的な概念やプロパティ・操作がそれぞれ特別な意味を持つから。
-
それぞれ明確に異なる二つのモデルが、同じ(あるいはよく似た)名前のオブジェクトを違う意味で使っていることも多い。二つのモデルを明確に境界づけておけば、それぞれのコンテキストにおける意味合いがはっきりする。したがって、境界づけられたコンテキストは主として言語的な境界となる。
-
境界づけられたコンテキストは、コアドメインと一対一に対応している。
-
一つのサブドメインと対応させ、そのドメインモデルを注意深く作り上げれば、その業務ドメインにおける最良の境界づけられたコンテキストが出来上がる。
-
境界の内部では、ユビキタス言語のあらゆる単語やフレーズが、特別な意味を持つ。そして境界内のモデルは、尊厳ごを正確に反映したものとなる。
-
境界づけられたコンテキストは、ドメインモデルだけを扱うものと決まっているわけではない。システムやアプリケーション、業務サービスなどを区切るために使うことも多い。
- 何かのモデルがきっかけとなって永続化ようのデータベーススキーマを作ることになったとしたら、そのデータベーススキーマも、同じ境界の内部に属することになる。
- データベースのテーブル名やカラム名などは、モデルで使っている名前を反映させたものになるはず。
-
境界づけられたコンテキストの主目的はユビキタス言語やそのドメインモデルをカプセル化すること。
- しかしドメインモデルとのやりとりがあるものや、ドメインモデルを支援するために存在するものなども、そこに含めることになる。
Discussion