ドメイン駆動設計とは - 金融取引アプリケーションを例に
ドメイン駆動設計(DDD)とは,ビジネス目標を達成する上で,ドメインの専門家と開発者,その他の関係者のコラボレーションを重視したソフトウェア開発アプローチだ – Naresh Bhatia氏は,DDDの基本コンセプトをこのような説明で紹介し,比較的理解が容易と思われる金融取引のドメインから,中程度の複雑性を持ったシステムであるBullsfirstを例として選択した。
Archfirstの創業者でソフトウェアアーキテクトのBhatia氏は,今回の例を説明するにあたり,DDDの基本を学ぶ上で,氏が最も重要であると考えるものを取り上げている。
ドメインにおける共通理解を達成する上で必要不可欠なのが,ユビキタス言語(Ubiquitous Language)である。共通の用語を使うことにより,ドメイン専門家と開発者の議論で誤解の生じるリスクが最小限になると同時に,開発者がドメインの説明において,プログラム的な用語を使用することを回避できる。
コンセプト境界(Bounded Context)は,ビジネス的な視点から,さまざまな問題を個々のコンテキストに分けることによって,巨大なドメインをより小さなものに分割する手法である。ひとつのチームで扱える程度にモデルを小さくするべきだ,とBhatia氏は述べている。
ドメインモデルにおいて最も一般的な概念であるエンティティや値オブジェクト(Value Object)に加えて,氏は,自身が重要と考えるいくつかの概念をまとめている。
- ドメインサービス(Domain Service)は,そのドメインの概念や,場合によってはオブジェクトのグループを対象としたビジネスロジックに関連するものであり,単一のエンティティに包含されない。ステートレスである場合も少なくない。氏が例として紹介したシステムでは,注文を約定して取引を行う,というビジネスロジックを備えたMatchingEngineがこれにあたる。
- ドメインイベント(Domain Event)は,ドメイン内で発生する何らかの重要な事象を表現する。このようなイベントのみを共有することにより,コンポーネントを分離するために使用可能なものだ。
- 集約(Aggregate)は,ユニットとして共同動作する,関連付けられたオブジェクトをグループ化するために用いられる。ひとつのオブジェクトを集約のルートに割り当てて,ユーザはそのメソッドのみを呼び出し可能とすることにより,他のすべてのオブジェクトを効果的に隠蔽できる。集約については以前にも,Vaughn Vemon氏が詳しく説明している。
Bhatia氏が例に挙げたシステムであるBullsfirstは,REST Maturity Level 2準拠のRESTful APIを備えた,証券取引を目的とするオープンプロジェクトで,注文の約定と取引の実行を行う役割のExchangeと,注文を作成するOrder Management Systemで構成されている。使用されている技術はJava,.NET,FIX,メッセージング,Webサービスといったものだ。コードはここからダウンロードできる。
特集コンテンツ一覧
実例で学ぶGS Collections – Part 2
Donald Raab 2014年11月20日 午後8時3分
実例で学ぶGS Collections – Part 1
Donald Raab 2014年10月23日 午前2時24分
プロジェクトインセプション - 協力体制を作るミーティングの方法
James Bayer 2014年10月14日 午後7時57分
カンバンはどのように動作するか
Amr Noaman Abdel-Hamid 2014年9月7日 午後7時43分
自己組織化チームはなぜ必要か?
Sigi Kaltenecker and Peter Hundermark 2014年8月31日 午前2時2分
効果的なテストの文化を創る
Wes McClure 2014年8月31日 午前1時54分
こんにちは
コメントするには InfoQアカウントの登録 または ログイン が必要です。InfoQ に登録するとさまざまなことができます。アカウント登録をしてInfoQをお楽しみください。
あなたの意見をお聞かせください。