ドメイン駆動設計
MDAの考え方は、ドメイン駆動設計と両立するが、二つの概念の意図するところは多少異なっている。MDAは、ドメインモデルをよりよく定義する方法よりも、技術の異なるプラットフォームに対してモデルをコードに変換する方法の方に関心がある。
ドメイン駆動設計は複数の種類のモデルを区別している。例えばエンティティは、属性ではなくIDによって定義されるオブジェクトである。例としてほとんどの航空会社はすべてのフライトの座席に一意のIDを割り当てて識別している。対照的に値オブジェクトは、属性を含むが概念的なアイデンティティを持たない不変オブジェクトである。例えば、人々が名刺を交換するとき、一意の名刺を区別しようとはせず、名刺に書かれた情報(属性)だけを利用する。モデルはイベント(過去に起こったこと)を定義することもできる。ドメインイベントとは、ドメインの専門家が関心を持っているイベントである。モデルはルートエンティティによって結合され、集約になることができる。集約外のオブジェクトはそのルートへの参照を保持できる一方で集約の他のオブジェクトへの参照は保持できない。集約ルートは、集約内の変更の一貫性をチェックする。例えば、ドライバーは車の各ホイールを個別に制御する必要はなく単に車を運転するだけである。このコンテキストでは、車は他のいくつかのオブジェクト(エンジン、ブレーキ、ヘッドライトなど)の集約と言える。
ドメイン駆動開発の実践は、特定のソフトウェアツールやフレームワークに依存したものではない。しかし、多数のオープンソースツールとフレームワークがEvansの書籍で推奨しているパターンや、ドメイン駆動開発の方法をサポートしている。以下のようなものがある。
Castle Windsor/MicroKernel:マイクロソフトの.NET Framework向けの制御の反転/依存性の注入コンテナであり、サービスとリポジトリ、ファクトリーを利用者に提供する。
Cosmos:ドメイン駆動設計の、中でもAOPの実践をサポートした、アプリケーションフレームワーク。
DataObjects.Net:データベースアプリケーションのフレームワーク/開発環境であり、オブジェクト関係マッピングとドメイン駆動開発をサポートしている。
Domdrides:ドメイン駆動設計をJavaで実現する際に有用なライブラリ。
ECO:CapableObjects社によるUML図からのデータベース、コード、状態マシンの生成を行うフレームワーク。
Flow:PHPのアプリケーションフレームワークで、ドメイン駆動開発を中心においている。良質なドメインモデルの形成を促し、またリポジトリ、エンティティ、値オブジェクトをサポートする。また依存性の注入、AOPのフレームワークを提供している。
Habanero.NET(Habanero):オープンソースのドメイン駆動開発の原則を用いてエンタプライズアプリケーションを開発するためのエンタプライズアプリケーションフレームワークで、.