ドメインはビジネスを説明する。ドメインは、企業活動を推進するコンセプトとロジックの集合だ。ドメイン駆動設計(DDD)でアプリケーションを作る場合、ドメインが最も重要な要素となる。.NETプラットフォームで開発を行っているスウェーデンのウェブ開発者であるAndras Nemes氏はドメイン駆動設計の原則に従ったウェブサービス開発についての連載ブログ記事の初回で このように説明している。
テクノロジー駆動の手法では技術選択がドメインに影響を与えてしまうことが簡単に起きる。しかし、DDDでは方向が逆だ。ドメインはアプリケーションにとって最も重要な構成要素であり、技術はさまざまな形態をを取りうる実装の細部にすぎない。氏はドメインはビジネスの要件に反応し、ドメインの変化は技術の選択にも影響を及ぼす。
氏は連載の目的はDDDのすべての側面をカバーすることではない、と明言している。氏の目的はDDDの最も重要な概念を盛り込んだ.NETソリューションを作成して、DDDに基づくプロジェクトのひな形として使ってもらうことだ。また、DDD初心者の開発者にも益があるように、取り上げるすべての概念について説明をしている。
次のレイヤを備えたすべてのソリューションを提供することが目的だ。
- インフラストラクチャ: 横断的な関心事を乗せるインフラストラクチャサービス
- リポジトリ: データアクセスと永続化レイヤ
- ドメイン: ビジネスエンティティとロジックを備えたドメインレイヤ。アプリケーションの中心
- アプリケーションサービス: 利用者にアクションを提供する薄いレイヤ
- ウェブ: アプリケーションの利用者
DDDツアーを始めるにあたって、氏はエンティティ、バリューオブジェクト、アグリゲートなどの主要な概念をガイドラインとともに説明している。さらに各レイヤの作成について連載に書いていくつもりだ。
ドメインが中心になることで、密結合を従来のレイヤ型ソリューションにある密結合を低減してくれる、というのが氏の考えだ。また、リポジトリの実装という最も技術駆動なレイヤを抽象化して隠蔽し、取り替え可能にもしているようだ。