WEB+DB PRESS Vol.113の特集として、「体験 ドメイン駆動設計 - モデリングから実装までを一気に制覇」を執筆しました。ボトムアップドメイン駆動設の@nrslibさんとの共著です。
抽象的な解説だけでなく、実際にモデリングから実装まで行うサンプルがある こと、ドメインモデル図、サンプルコードそれぞれ4段階に分かれて改善の過程が追えるようになっている ことが特徴です。
DDDでは抽象的な議論に終始しがちなところ、具体的な事例を用いて目的や効果を理解してもらえる構成を心がけました。
構成
1章 なぜいまドメイン駆動設計か - 仕様がわかり、変更容易なコードへ
担当: @nrslibさん
「結局DDDって何がしたいの?」ということを理解できるように、従来の開発手法の問題点、ドメイン駆動設計による解決法を示します。
2章 ドメインモデリング - 現場の知識を抽出し、問題解決力の高いモデルを作成する
担当: @little_hand_s
実例をもとに、実際にモデリングを行います。
エンジニアだけでモデリングしたものから始め、 ドメインエキスパート(現場の詳しい人)の意見を取り入れてモデルを進化させ、さらに集約というDDD特有の概念反映したモデルにする というステップを踏んで、モデルを完成させます。
3章 モデルのコーディング - リファクタリングによる改善の過程を追う
担当: @little_hand_s
第2章で作成したモデルを、コードに落とし込みます。ありがちなドメインモデル貧血症(ドメイン知識を持っていないドメインオブジェクト)の実装からはじめ、ドメイン知識をドメイン層のオブジェクトに移譲し、さらにValueObjectなどを使って凝集度をあげる、というステップでコードをリファクタリングして完成させます。
4章 ドメイン駆動設計の実装パターン - ベストプラクティスを実例で学ぶ
担当: @little_hand_s
3章で使われていたEntityなどの実装パターンを振り返りながら定義を解説します。また、複雑なモデルの応用編として、状態遷移をドメインオブジェクトで表現することに挑戦します。
5章 ビジネスの変化との対峙 - 変更容易性をコードで実証する
担当: @nrslibさん
4章までの実装に対して、実際に仕様変更に対する対応を行い、「仕様の把握」「変更容易」といったドメイン駆動設計のメリットを検証します。
サンプルコード
ダウンロードサービスとして、サンプルコードが公開されています。
https://github.com/little-hands/webdbpress-2019-10-ddd
3〜4章における4段階のリファクタリングにおける実装が、V1〜V4というパッケージに分かれて段階的に追えるようになっています。
解説は本誌を見ていただく必要がありますが、リファクタリング過程のコードだけでも参考にしていただけるかと思います。
ご質問、問い合わせなど
記事内容やDDDに関するご質問、お問い合わせは質問箱で受け付けています。匿名で質問できるので、お気軽にご質問ください。回答は@little_hand_sのアカウントでツイートします。
また、個別で実装パターン勉強会・ドメインモデリングハンズオンなど開催しております。詳細はこちらのページに記載しておりますので、ご興味ある方はこちらの記事ご参照いただき、お問い合わせください。 https://little-hands.hatenablog.com/entry/2019/10/05/seminars
お願い
Twitterハッシュタグ#体験DDDで感想を呟いていただけると非常に励みになります。よろしくお願いします。笑
【2021/10/30新刊】
DDD解説書の新刊を執筆しました。 重要トピック「モデリング」「集約」「テスト」について詳細に解説し、その他のトピックでは頻出の質問への回答と具体的なサンプルコードをふんだんに盛り込みました。現場で実践して、困っていることがある方はぜひこちらもご覧ください。
YouTubeで10分でわかるDDD動画シリーズをアップしています。概要を動画で理解したい方はこちらもどうぞ。チャンネル登録すると新しい動画の通知を受け取ることができます。