Implementing Domain-Driven Design の出だし紹介

ようやく邦訳版がでますのでリンクだけ更新しておきます。

実践ドメイン駆動設計 (Object Oriented Selection)

実践ドメイン駆動設計 (Object Oriented Selection)

Implementing Domain-Driven Design

Implementing Domain-Driven Design

DDD の全体像

DDD の柱である Ubiquitous Language は単一の Bounded Context 内において適用されます。 Bounded Context の中では、明確な Ubiquitous Language にて戦略的にソフトウェアがモデル化される必要があり、ドメインモデルの思考法を注意して適用していく必要があります。

Strategic Modeling

Bounded Context は、ドメインモデルが適用できる概念上の境界線となります。 これはチームの共通言語となり、慎重に設計されたソフトウェア・モデルを表現するコンテクストを提供します。この様子を図 G.1 に示します。

f:id:Naotsugu:20140501032233p:plain

戦略的な設計を経験した結果、図 G.2 に示す Context Mapping パターンが協調動作に必要だと分かるでしょう。 Bounded Context 同士の関係をコンテキストのマップが表現します。

f:id:Naotsugu:20140501032243p:plain

Architecture

Context Mapping を通して相互作用する新しい Bounded Context や既存のものは、新しいスタイルの Architecture を適用することが必要な場合があります。戦略的に戦術的に設計されたドメインモデルはアーキテクチャ的に中立であることは特に重要です。 それぞれのモデルを囲み Bounded Context をホストする強力なアーキテクチャスタイルが Hexagonal で、これによりサービス指向であったり、REST や イベントドリブンのスタイルが促進されます。 図 G.3 に Hexagonal アーキテクチャを示します。

f:id:Naotsugu:20140501032252p:plain

DDDに基づいた重要なモデルを慎重に構築することよりも、アーキテクチャについてより重要視してしまう場合があります。アーキテクチャは重要ではありますが、どちらがより大きなビジネス的な価値があるか、どちらが長く生き延びるかを考えて、正当な優先事項を見定めなければなりません。

Tactical Modeling

Bounded Context の中で DDD を構成する戦術的なパターンで最も重要なパターンの1つは 図 G.4 に示す Aggregate です。

f:id:Naotsugu:20140501032302p:plain

Aggregate は1つの Entity または 複数のエンティティ と Value Objects の一群を生涯に渡って首尾一貫した処理を集約します。 この集約を効果的にモデル化することは非常に重要であり、DDDの構成要素としても良く知られたテクニックの1つとなります。 Aggregate インスタンスは Repository を使って集約対象とともに永続化され、その後で検索されたりします。この様子は前述の図 G.4 で見ることができます。

Entity や Value Objects の活動として自然に思えないビジネス上の操作は、図 G.5 に示すステートレスな Services を使います。

f:id:Naotsugu:20140501032312p:plain

ドメインの中で起きる重要な出来事を表すには Domain Events を使います。Domain Events はいくつかの異なる方法でモデル化することができます。いくつかの集約に対するコマンド操作の結果として発生する出来事を捕捉した場合、図 G.6 で表されるように、集約(Aggregate)自身がイベントを発行します。

f:id:Naotsugu:20140501032322p:plain

あまり重要視されることが少ないですが、正しく Modules を設計することはとても重要です。簡単に考えるなら、Modules は Java のパッケージや C#名前空間と考えてください。 Ubiquitous Language によらずに、機械的に(機能的に)モジュールを設計をしてしまうと、これは有害にしかならないことを覚えておいてください。 図 G.7 に Modules がどのように選択的にドメインオブジェクトを含む制約を課すかを示します。

f:id:Naotsugu:20140501032332p:plain

もちろん DDD の実践はこれだけではありません。それはあなたの前にあるこの本の中にあります。この本が DDD の実践の旅の良いガイドとなるでしょう。それでは旅行を楽しみましょう。

図とかコピペしてしまいまして、怒られたら消します。

で、目次構成は

  • Chapter 1: Getting Started with DDD

  • Chapter 2: Domains, Subdomains, and Bounded Contexts

  • Chapter 3: Context Maps

  • Chapter 4: Architecture

  • Chapter 5: Entities

  • Chapter 6: Value Objects

  • Chapter 7: Services

  • Chapter 8: Domain Events

  • Chapter 9: Modules

  • Chapter 10: Aggregates

  • Chapter 11: Factories

  • Chapter 12: Repositories

  • Chapter 13: Integrating Bounded Contexts

  • Chapter 14: Application

  • Appendix A: Aggregates and Event Sourcing: A+ES

てな感じです。