little hands' lab

ドメイン駆動設計を布教したい

WEB+DB PRESS特集「体験 ドメイン駆動」を執筆しました [DDD]

f:id:little_hands:20191024060929p:plain:w150

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で感想を呟いていただけると非常に励みになります。よろしくお願いします。笑