DDDの言及する範囲
DDD関連の用語
- ドメイン:システムの対象とする業務領域
- 境界づけられたコンテキスト: 特定のモデルが定義され適用される境界(サブシステムとか)
- 出品管理・販売・会計・配送などそれぞれの文脈で「商品」が解決したい問題や求められるふるまい・性質は大きく異なるため、各コンテキストでモデルを定義する。
- ユビキタス言語: ドメインモデルに基づいた、チームで使う共通言語
- 言葉にぎこちなさや不明瞭さがあれば、それはモデルに問題があるというサイン
ドメインを技術的関心事から切り離す
レイヤードアーキテクチャ
プレゼンテーション層 (UIとか)
↓
アプリケーション層 (ユースケースとか)
↓
ドメイン層 (ドメインオブジェクトとか)
↑
インフラ層 (DBとか)
- ドメイン層がシステムの中核で、技術的な問題よりもドメインにフォーカスする
- ドメイン層はDBやWebの話は出さず、業務仕様を表すピュアなモデルを作り上げていく
- ドメイン層は、他の層によって使われるために存在しており、使う側に取って理解しやすく、間違って使われることがないような概念やIFにすべき
モデリングのルール
| モデル | 説明 |
|---|---|
| エンティティ | indentityを保持するObject、IDが同一で他の要素が変わったとしても同一エンティティとみなせる。 VOや子エンティティを保持する場合もある。この場合のエンティティをAggregateと呼ぶ |
| バリューオブジェクト | 値や属性を表すもの。例としては、色や量など属性自体が重要なObject 不変でイミュータブル |
| ドメインサービス | モノではなく純粋な処理で状態をもたない |
| リポジトリ | エンティティ(集約)の今の状態を保存しておく。実装はインフラ層に配置 エンティティを保管し、必要なときに保存時と同じ状態で取り出せる。複雑なロジックは入れない |