読書メモ:ドメイン駆動設計をはじめよう
ドメイン駆動設計(DDD)が話題になってからかなりの時間が経ちますが、私はネットの記事などで言葉だけを知っている程度で、本格的に学習したことはありませんでした。そのため、この本を手に取りました。有名な『エリック・エヴァンスのドメイン駆動設計』は抽象的で高度な内容と聞いており、消化不良になりそうだと感じたため、より具体的な実装方法を含むこちらの本を選びました。
まず、この本は「設計」という抽象的なテーマを扱っているにもかかわらず、著者の豊富な経験に基づき、ドメイン駆動設計の各フェーズを実際のシステム設計へと落とし込む過程が丁寧に解説されています。そのため非常に理解しやすく、「買って正解」だと感じました。
第一部「設計の基本方針」では、ドメイン駆動設計で必要となる概念や用語の定義と使い方を整理しています。たとえば業務領域における「中核」「一般」「補完」の違いを、企業事業の事例を通して明快に説明しており、DDDのエッセンスを吸収することができました。
また、最も重要とされる「ドメインエキスパートとの協働」や「業務知識のシステム化」に関しては、同じ言葉=ユビキタス言語(Ubiquitous Language)をどう扱うか、境界づけられた文脈(Bounded Context)をどのように分割するか、さらにドメイン間を結ぶ共用サービスやドメイン変換装置の活用法まで詳細に解説されています。まるでDDDのコンサルティングを受けているような実践的な内容でした。
第二部「実装方法の選択」では、定義したドメインをどのように実装すべきかを具体的に学べます。
中核・補完・一般の区分ごとに、たとえばトランザクションスクリプト、アクティブレコード、値オブジェクト、集約などをどのように適用し、実装するのかをコードスニペットと共に解説しています。マーティン・ファウラーの『エンタープライズアーキテクチャパターン』の参照も含まれており、より深く理解するには付属の参考文献リストにある関連書籍も読む必要がありそうです。
第三部「ドメイン駆動設計の実践」では、第一部・第二部で学んだ内容を踏まえて実際の設計プロセスを体験します。各業務領域ごとのアーキテクチャ選択やテスト戦略、事業変化に応じた設計の進化の仕方などが扱われています。
特に「イベントストーミング」に関しては詳しく解説されており、著者が重視する「ドメインエキスパートやチームメンバーを巻き込みながら同じ言葉(ユビキタス言語)を育てていく重要性」が強調されています。さらに、最も効果的である既存システムを段階的にDDDへ移行する手法についても具体的に述べられており、レガシーシステムを担当するエンジニアにとって大いに参考になると感じました。
第四部「他の方法論や設計技法との関係」では、DDDと最新の設計手法との関係を整理しています。
境界づけられた文脈をどのようにマイクロサービスへ分割するか、逆に細分化しすぎて「分散された泥だんご」になってしまうアンチパターン、イベント駆動アーキテクチャとの連携や注意点、データメッシュとイベント駆動の関係などが具体的に示されています。全体像を鳥瞰図で俯瞰しながらDDDに最適化していく内容は、企業のCTOやITアーキテクトにとって間違いなく役立つでしょう。
付録A「ドメイン駆動設計の実践:事例研究」では、著者自身の体験をもとに、理論・実装・実践・他の手法を組み合わせたプロジェクト事例を紹介しています。スタートアップで『エリック・エヴァンスのドメイン駆動設計』を積極的に導入した結果、直面した課題や失敗・成功、そして最終的に会社がなくなってしまった経緯まで赤裸々に語られ、臨場感を持って学ぶことができました。読み終えた後には、エンジニアとして「DDDを学んでよかった」と思える構成になっています。
この本だけでも十分にDDDのポイントを理解できますが、頻繁に参照されているマーティン・ファウラーの『エンタープライズアーキテクチャパターン』や、エヴァンス本を読むことで理解はさらに深まると感じました。
総じて、ビジネス全体を戦略的にシステム開発する方法が含まれるため、事業会社のCTOやITアーキテクトには必読の内容です。オライリー本でありながらDDDの専門用語がわかりやすい日本語で再定義されており、非常におすすめできる一冊です。