はじめに
ドメイン駆動設計(DDD)とは、2003年にエリック・エヴァンス氏が『Domain-driven design』という書籍にて提唱したソフトウェア開発手法です。DDDを簡単に説明すると「顧客と開発者が業務を戦略的に理解し、共通の言葉を使いながらシステムを発展させる手法」です。具体的には、チームの共通言語である「ユビキタス言語」を用いて「ドメインモデル」を構築し、それをコードとして実装します。また大規模で密結合なシステムにならないように「ドメイン」と「境界づけられたコンテキスト」にてシステムを分割し、「コアドメイン」という最重要領域に集中して開発を行います。
ソフトウェア開発の課題とDDDが解決すること
DDDの登場から10年以上が経ち、DDDは着実に普及しつつあります。DDDが普及してきている背景として、システム開発がますます多機能/複雑になり、ビジネス的にも敏速な変更が求められていることが挙げられます。従来のように、全システムを対象に設計者が上流工程で時間を掛けて仕様を検討し設計書通りにプログラマが開発するといった従来の手法では、顧客が求める機能と速度感にズレが発生してしまうため、ビジネス的な成功が困難になってきています。
そのため、DDDでは大規模な1つのシステムとデータベースで構築するのではなく、業務にとって適切な独立したシステムに分割します。そして、顧客と開発者で話す言葉を共通化し、トランザクション処理ではなく業務を表すドメインモデルを構築することで、お互いのズレを減らしていきます。
またマイクロサービスや非同期処理を簡単に構築できる「クラウド」環境が普及してきたことや、顧客と融け合う「アジャイル」が普及してきたことも、DDDのに注目が集まる一因となっています。
本書で紹介する内容と対象読者
2013年、ヴァーン・ヴァーノン氏の書籍『Implementing Domain-Driven Design』(邦題『実践ドメイン駆動設計』)が発売されました。これはDDDで開発した人の経験を元にDDDを再整理し、実装方法について解説しています。そこで、本連載では、IDDD本の流れに沿って、重要な部分にフォーカスすることで、DDDについて理解することをお手伝いします。当記事をきっかけに、DDDに新たに挑戦される方がいましたら幸いです。
なお、当連載の対象読者は、DDDに関心を持たれている方、または、DDDで開発したい方を対象としています。DDD以前の既存技術に関する詳細は説明しませんので、中級者以上の開発者を想定しています。
IDDD本の目次
IDDD本の目次を見てみましょう。IDDD本の目的は「DDDの理論を実際に適用する」ことです。本稿では、これらの流れに沿って各要素をご紹介します。
章 | 区分 | タイトル |
---|---|---|
目次 | 概要説明 | 序文、賛辞、はじめに、著者について、本書の読み方 |
1章 | DDDのメリット | DDDへの誘い |
2章 | 戦略的設計 | ドメイン、サブドメイン、境界づけられたコンテキスト |
3章 | コンテキストマップ | |
4章 | 戦術的設計 | アーキテクチャ |
5章 | エンティティ | |
6章 | 値オブジェクト | |
7章 | サービス | |
8章 | ドメインイベント | |
9章 | モジュール | |
10章 | 集約 | |
11章 | ファクトリ | |
12章 | リポジトリ | |
13章 | 境界づけられたコンテキストの結合 | |
14章 | アプリケーション |
1章〜3章は主に「戦略的設計」について解説しています。戦略的設計とは「チームで使うパターン」のことです。ビジネスにおける言語に価値を置き、業務に関わる人の考え方をドメインモデルとして表現します。
4章〜10章では「戦術的設計」について説明しています。戦術的設計とは「テクニカルなパターン」のことです。アーキテクチャ、DDD固有のパターンといった技術的な内容が含まれます。
なお、「戦略的設計」を実施せず、エンジニアが取り組みやすい「戦術的設計」にだけ注力すると、「軽量DDD」と呼ばれる事業価値を発揮できない貧弱なDDDになってしまうため注意が必要です。
主要なDDD解説本
DDDの解説を始める前に、日本で発売されているDDDに関する書籍について紹介しておきます。
原書名:略称(日本語翻訳名) | 著者(翻訳・監修) | 原書発売年(日本語版発売年) | 内容 | 日本語版の総ページ数 |
---|---|---|---|---|
Domain-Driven Design - Tackling Complexity in the Heart of Software:DDD本/エヴァンス本(『エリック・エヴァンスのドメイン駆動設計』) | Eric Evans(和智右桂、牧野裕子 訳 今関剛 監修) | 2003年(2011年) | パターン・ランゲージ形式によるDDDの理論 | 538P |
Applying Domain-Driven Design and Patterns:ADDDD本(『ドメイン駆動』) | Jimmy Nilsson(長尾高弘 訳 尾島良司 監修) | 2006年(2008年) | C#/.NETでの実践例 | 476P |
Implementing Domain-Driven Design:IDDD本(『実践ドメイン駆動設計』) | Vaughn Vernon(高木正弘) | 2013年(2015年) | DDDの理論とJavaでの実践例 | 583P |
DDDの実装方法だけを理解しようとしていると形式的な実践となり、失敗する可能性が高くなります。そのため、DDDに興味を持たれた方は、これらの書籍に目を通し「ソフトウェア開発の複雑さに対して、どのようにして美しく構築しようとしているのか」という信念を理解して頂ければ幸いです。