ISBN 9784839988203
つくりながら学ぶ! ドメイン駆動設計 実践入門
概要
TypeScriptでDDDを設計から実装まで体得する
想定読者
DDDの書籍を読んで概念は知っているが、戦略的設計と戦術的設計の連携や実装への落とし込み方で行き詰まった経験のある中級TypeScriptエンジニア
こんな人には向いていない
- TypeScriptの型システムやジェネリクスをまだ習得中の段階では、コード読解だけで消耗して設計の学びに届きにくい
- DDDの哲学・理論面を深めたい読者には、ハンズオン実装の比重が大きすぎて主客逆転しやすい
- 集約設計やリポジトリパターンをすでに本番プロジェクトで実践済みのシニアエンジニアには、Part3の戦術的設計解説が既知事項の繰り返しになる
この本で身につくこと
- イベントストーミングで業務知識を整理し、境界づけられたコンテキストとサブドメインを特定できる
- 値オブジェクト・エンティティ・集約・ドメインサービスをTypeScriptで実装し、不変条件を型で表現できる
- リポジトリパターンとアプリケーションサービスを使ってドメイン層をインフラ詳細から隔離できる
- Outboxパターンによって分散環境でのイベント発行の信頼性を確保する実装判断ができる
- 中核ビジネスロジックの独立性を維持しながら拡張・メンテナンスに耐える設計をコードベースで説明できる
ハイライト(外部からの言及)
著者自身、TypeScriptでドメイン駆動設計を実践する際、具体的な情報が見つからず苦労しました。「同じ悩みを抱える開発者に、実践的な知識とノウハウを届けたい」 — 出典
著者の執筆動機と対象読者の痛点が一致しており、誰のための本かが最も端的に示されている箇所
「戦略的設計と戦術的設計はどう連携するのか」「ビジネスロジックを技術的詳細からどう切り離すのか」。本書を通じて、これまで断片的だった知識が体系的につながる瞬間を体験できるはずです — 出典
DDD挫折の根本原因を二つの問いに集約しており、本書が解こうとする問題構造が最も明瞭に表れている
章立て
第3章 戦略的設計
境界づけられたコンテキストとサブドメインの識別を扱う。実装コードより前に業務理解の土台を作る最重要章
第4章 業務知識の獲得
イベントストーミングの実践手順。ドメインエキスパートとのコラボレーション手法として現場で直接使える
第5章 ドメインモデルの可視化
UMLによるモデリングを扱う。Chapter3-4の成果物をコードに落とす前の橋渡しとなる
第9章 値オブジェクト
TypeScript実装の起点。不変性とequality semanticsの設計判断を具体コードで体得できる
第11章 集約
整合性境界の設計が最も難しい章。集約の粒度判断を実例で学べる
第13章 リポジトリ
ドメイン層とインフラ層の切り離し方が具体的に示される。依存性逆転の原則をコードで体感できる
第17章 中核ビジネスロジックの独立性を守る
拡張時にドメインが技術詳細に侵食されないための設計判断を扱う。現場への導入判断材料として価値が高い
第20章 Outboxパターンによる確実なイベント発行
分散環境でのAt-least-once保証の実装例。本番採用を検討する際の具体的な参照先となる
第21章 イベントソーシングという選択肢
採用すべき条件とトレードオフを論じている。「使うべきか」の判断フレームとして活用可能
関連記事 / 参考情報
- DDDで挫折した人へ。つくりながら腹落ちさせる実践入門書 — DDD挫折経験者に向けて、TypeScript実装を通じて概念を体得できる構成を紹介
学習のヒント
- Part1(Chapter1-2)はDDDの文脈整理なので、DDDの概略を既知の読者は速読で十分。Part2のChapter3(戦略的設計)とChapter4(業務知識の獲得)が全体の要であり、ここを丁寧に読んでからPart3の実装フェーズに入ると収穫が大きい
- Chapter9(値オブジェクト)からChapter14(アプリケーションサービス)は章順通りに手を動かすことが重要。GitHubリポジトリの章別コードをIDEで実行しながら読むと、各パターンの責務の境界が体感として定着しやすい
- Part4(Chapter16以降)はイベント駆動アーキテクチャとOutboxパターンまで踏み込んでいる。初読では流し読みし、実務での既存プロジェクトへのDDD導入を検討する段階で再読するとリファレンスとして機能する
- 「オンライン書店のカタログ管理」という一貫した題材を使っているため、後半のコードは前半で定義したドメインモデルに依存している。章をバラバラに参照するより通読後に現場へ持ち帰るほうが全体像が崩れにくい
前提知識
- TypeScriptの型システム(interface・type alias・ジェネリクス)を実際に書いた経験
- Webアプリケーションにおける三層アーキテクチャ(プレゼンテーション・ビジネスロジック・データアクセス層)の基礎知識
- SQLによるCRUDとトランザクション(ACID)の概念
- UMLクラス図の読み方(書けなくてもよいが、Chapter5のモデリング章で参照する)
次に読む本
実践ドメイン駆動設計(Vaughn Vernon著)
戦術的パターンをより深く掘り下げた原典。本書でTypeScript実装を終えた後に読むと、言語・フレームワーク依存のない設計原則が体系化される
ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本(成瀬允宣著)
本書と同じく実装ベースのDDD入門だがC#で書かれており、言語を超えたパターンの本質を比較読みで確認できる
データ指向アプリケーションデザイン(Martin Kleppmann著)
Part4で扱うイベント駆動アーキテクチャとOutboxパターンの背景にある分散システムの原理を深掘りする定番
出版社による内容紹介
「ドメイン駆動設計は難しい」そう感じて挫折した経験のある方にこそ、手にとっていただきたい一冊です。 ドメイン駆動設計の本質は、ビジネスの中核となる領域を見極め、そこに開発リソースを集中させることにあります。本書では、座学だけで終わらせず、コードを「つくりながら」この設計思想を体得することを目指します。 具体的には「オンライン書店サービスのカタログ管理」を題材に、イベントストーミングによる業務分析、UMLによるモデリング、そしてTypeScriptでの実装まで、設計から実装へ落とし込む一連のプロセスを追体験できます。 「戦略的設計と戦術的設計はどう連携するのか」「ビジネスロジックを技術的詳細からどう切り離すのか」。本書を通じて、これまで断片的だった知識が体系的につながる瞬間を体験できるはずです。実装フェーズでは、特典のGitHubリポジトリにて各章ごとのコードを確認しながら学習を進められます。 著者自身、TypeScriptでドメイン駆動設計を実践する際、具体的な情報が見つからず苦労しました。「同じ悩みを抱える開発者に、実践的な知識とノウハウを届けたい」。それが本書の執筆動機です。学習用ハンズオンとしてはもちろん、現場でのリファレンスとしても長くお使いいただける一冊です。 〇本書の構成 Part 1 ドメイン駆動設計への招待 Chapter 1 はじめに Chapter 2 ビジネス課題とドメイン駆動設計 Part 2 ビジネス価値の発見 Chapter 3 戦略的設計 Chapter 4 業務知識の獲得 Chapter 5 ドメインモデルの可視化 Part 3 ドメインモデルの実装 Chapter 6 戦術的設計とコード実装 Chapter 7 アーキテクチャ Chapter 8 実装の準備 Chapter 9 値オブジェクト Chapter 10 エンティティ Chapter 11 集約 Chapter 12 ドメインサービス Chapter 13 リポジトリ Chapter 14 アプリケーションサービス Chapter 15 プレゼンテーション層の実装 Part 4 ビジネス価値を守り続ける Chapter 16 拡張性とメンテナンス Chapter 17 中核ビジネスロジックの独立性を守る Chapter 18 ビジネスロジックを技術実装の詳細から分離する Chapter 19 イベント駆動アーキテクチャ Chapter 20 Outboxパターンによる確実なイベント発行 Chapter 21 イベントソーシングという選択肢
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。