ISBN 9784798121963
エリック・エヴァンスのドメイン駆動設計 : ソフトウェア開発の実践
概要
ドメインモデルを軸にソフトウェアの複雑性を制御する設計体系を習得する
想定読者
業務アプリケーションの設計に行き詰まりを感じている中〜上級バックエンドエンジニア。特にビジネスロジックの置き場所や巨大クラスの分割に課題を持つ人
こんな人には向いていない
- OOP(クラス設計・インターフェース・継承)を習得する前の入門段階のエンジニア。DDD初心者が学習途中で挫折するケースが多いことがQiita上の複数記事で指摘されており、設計経験なしに読み始めると概念の密度に消耗しやすい
- 動作するコードサンプルから直接学びたい読者。本書はパターンと概念の整理が中心であり、実装寄りの解説を主な目的として読む場合は補完書籍との併用が必要になる
- シンプルなCRUDが主体の小規模システムを担当しているエンジニア。QiitaのDDD/レイヤードアーキテクチャ関連の上位記事が一貫して複雑性のある中〜大規模システムを前提に議論しており、業務ロジックの複雑さがない局面では投資対効果が出にくい
この本で身につくこと
- ユビキタス言語を定義し、ビジネス要件とコードの間の用語ズレを解消できる
- エンティティ・値オブジェクト・集約の違いを設計判断として使い分けられる
- レイヤードアーキテクチャを用いてビジネスロジックをインフラ層・プレゼンテーション層から隔離できる
- ドメインサービス・リポジトリ・ファクトリの責務を正しく定義し、適切な層に配置できる
- 境界づけられたコンテキスト(Bounded Context)で大規模システムをモジュール分割する方針を立てられる
- 腐敗防止層(ACL)を用いてレガシーシステムや外部サービスとのインテグレーションを設計できる
読了後にできること
Before(読む前): Controller やサービス層に業務ロジックが集積して巨大クラスが生まれ、どこに何を書くべきか判断軸を持てずにいた
After(読み終えた後): エンティティ・値オブジェクト・ドメインサービスへの責務配置を自分で定義でき、業務ロジックの散在とクラス肥大化を設計段階で抑制できる
章立て
(公式情報未確認 — 出版社公式ページの目次が公開され次第、本セクションを更新予定)
関連記事 / 参考情報
- 「ビジネスロジック」とは何か、どう実装するのか — ドメイン層・アプリケーション層の責務を整理し、DDD を起点に業務ロジックの正しい配置先を解説
- Webアプリケーションフレームワーク導入時に考慮すべき22の観点 — FW 選定の設計判断軸を網羅的に整理し、DDD との整合性を含む観点を体系化
- 関心の分離を意識した名前設計で巨大クラスを爆殺する — DDD の値オブジェクトと関心の分離を使い、肥大化したクラスを役割単位に分割する実践的手法
- 中規模Web開発のためのMVC分割とレイヤアーキテクチャ — MVC を出発点にレイヤードアーキテクチャへ進化させる設計判断を DDD の文脈で整理
- 役割駆動設計で巨大クラスを爆殺する — DDD の設計原則を「役割」という切り口で再解釈し、実装レベルで巨大クラスを解体する手法
- [DDD]ドメイン駆動設計で実装を始めるのに一番とっつきやすいアーキテクチャは何か — DDD 初学者が最初に採用すべきアーキテクチャを比較し、段階的な学習パスを提示
- オブジェクト指向プログラミングとドメイン駆動設計を学ぶのに適切な書籍とおすすめの読む順番 — OOP と DDD の書籍を学習段階別に整理し、Evans 本の位置づけと読む順序を解説
- ドメイン駆動設計を勉強するときのオススメ資料 — Evans 本を中心に DDD 学習に有効な書籍・スライド・動画を体系的にまとめた入門ガイド
- 「集約」でデータアクセスの 3 つの課題に立ち向かう — DDD の集約概念を使って Repository 肥大化・整合性崩れ・N+1 問題を解決するアプローチを解説
- なぜDDD初心者はググり出してすぐに心がくじけてしまうのか — DDD 学習で初心者がつまずくポイントを分析し、Evans 本の難度を踏まえた効果的な学習アプローチを提案
学習のヒント
- 概念密度が高いため、全章を順番に通読しようとすると中盤で止まりやすい。Part I(ドメインモデルを機能させる)と Part II(モデル駆動設計の構成要素)を優先し、Part III・IV は実務の課題が生じたタイミングで参照する読み方が吸収しやすい
- 読み始める前に『Domain-Driven Design Quickly』など薄い入門書を1冊通しておくと、本書の概念密度に消耗せずに読み進められる。Qiitaの学習記事でも副読本との併用が推奨されている
- 実プロジェクトで感じている設計上の課題(肥大化したサービスクラス・業務ロジックの散在など)を手元に置きながら読むと、各パターンの適用意図が掴みやすい。課題ありきで「辞書的に引く」使い方も有効
- ユビキタス言語の章はエンジニアだけでなくビジネス担当者と一緒に読み合わせると効果的。本書のコアコンセプトである「設計と言語の統一」を体験的に理解できる機会になる
前提知識
- オブジェクト指向設計の実務経験(クラス・インターフェース・継承を実際のコードで使ったことがある)
- 業務アプリケーション開発の経験(1年以上)。設計の複雑さを経験していないと、本書が解こうとしている問題が実感しにくい
- MVC アーキテクチャとレイヤー分割の基本概念
次に読む本
実践ドメイン駆動設計
Vernon による実装寄りの解説書。Evans 本で概念を掴んだ後に具体的なコードパターンへ落とし込むための定番書。DDD学習の「第二段階」として位置づけられることが多い
Clean Architecture
DDD のレイヤードアーキテクチャとクリーンアーキテクチャを接続して理解することで、依存の方向性・テスタビリティの設計語彙が広がる
マイクロサービスパターン
Bounded Context の考え方をマイクロサービス分割に応用する局面で参照価値が高い。DDD の文脈でサービス境界を議論する記事が複数この方向性を示唆している
出版社による内容紹介
ソフトウェア開発における「ドメイン駆動設計(DDD)」の考え方と実践を体系化した古典的名著の翻訳書。モデル駆動設計、ユビキタス言語、境界づけられたコンテキストなどの概念を通じて、複雑な業務ロジックを保守性の高い設計に落とし込む手法を論じる。業務システムに関わる設計者・開発者にとって長く参照される一冊である。
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。