ドメイン駆動設計 (Domain-Driven Design/DDD) とはすなわちドメインだ,永続性ではない – Julie Lerman氏が先日,スエーデンの開発者カンファレンスØredevで行ったプレゼンテーションでの説明だ。
2003年のMicrosoft MVPであり,.NETプラットフォームのコンサルタントである氏は,この25年間,データベースプログラミングに注目してきた。ここ数年は Entity Framework (EF) を用いていたが,最近ではドメインを重視したDDDに関心を持っている。
自身の経験から,DDDに従事する人々の多くは永続性を気に掛けていない,データベースはもはや開発作業の最後の付け足しに過ぎない,と氏は述べている。とは言っても,最終的にはデータをデータベースに格納しなければならない。ドメインを重視しながらも,永続化の機能を追加すべき時がいつなのかは事前に把握しておきたい,と氏は考えている。
コンテキスト境界(Bounded Context)は氏にとって,DDDでもっとも重要なコンセプトのひとつだ。アプリケーション全体のエンティティや動作などを一度に考えなくてよいように,コンテキスト境界は,問題に関する思考の構造化,サブシステム化を支援してくれる。カスタマサービスに関する作業を行う時には他のサブシステム,例えばマーケティングとのインタラクションは無視することができるのだ。識別情報などわずかな情報を他のコンテキストから参照する必要はあるかも知れないが,ほとんどの部分は,コンテキストドメイン内の境界情報を考えるだけでよい。つまり永続性を考えるにあたって,一度に注目するのは少数のエンティティに限定できる,ということだ。
例えば顧客エンティティのように,複数のコンテキストで同じエンティティを使用して作業するような場合であっても,永続化の対象となるCustomerテーブルを変更することなく,コンテキスト毎に顧客エンティティを再定義できるのである。別テーブル,あるいは別データベースによって完全にコンテキストが分離されるようなことがなければ,潜在的な拡張を意識することもない。
バリューオブジェクト(Value Object)は氏を困惑させるコンセプトのひとつだ。氏は5人にDDDエキスパートから違う説明を受けた。彼らの言うことはみな正しく,氏の見聞を豊かにしてくれた。バリューオブジェクトとは,データベースの複数カラムに永続化される複合タイプとして機能する,アイデンティティを持たない不変オブジェクトである,というのが,現在の氏の認識だ。
氏は通常,ドメインモデルをデータモデルとしても使用しているが,非常に複雑なドメインを扱う場合には,永続化モデルを分離する必要を感じている。従来型のデータベースを使った開発が,そのようなシナリオのひとつだ。
氏は今年始め,データ駆動開発からDDD利用に移行する過程で学んだことを基に,3つの記事を書いている。