ドメイン駆動設計を勉強するときのオススメ資料

この記事は、[ドメイン駆動設計 #1 Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ddd)の9日目です。
明日は@kmdsbngさんです。

今回は、ドメイン駆動設計（以下DDD）を学ぼうとする人に対して参考になる資料をまとめます。

## DDD関連資料のオススメ

 まずはDDDの青い本、[エリック・エヴァンスのドメイン駆動設計](https://www.amazon.co.jp/dp/4798121967/)から手を出したいところですが、500ページ超えで分厚く、初学者の人とっては解説される内容が抽象度が高く、理解するのに苦労すると思います。

ですのでこれから紹介するSTEPの順番から読んでいくのことをオススメします。

## STEP1
まずはDDDの概念から理解していくことから始めましょう。下記の本がオススメです。
### わかる！ドメイン駆動設計 ～もちこちゃんの大冒険～
![わかる！ドメイン駆動設計.jpg](https://qiita-image-store.s3.amazonaws.com/0/43738/c698da7a-23c9-d704-7c82-3867cf754bef.jpeg)
https://booth.pm/en/items/392260

この本はストーリー形式でDDDを解説されていますので比較的理解しやすいと思います。
技術同人誌らしく、可愛らしいイラストもあって心理的ハードルを下げてくれます。

### 現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法
![61d7GWbXVJL.jpg](https://qiita-image-store.s3.amazonaws.com/0/43738/5c2a7963-a0e2-09d1-8537-018f60791d56.jpeg)
https://www.amazon.co.jp/dp/477419087X/

この本は、DDDの構成要素の一つであるオブジェクト指向を解説しながら
設計について学べる本です。
DDDについてあまり言及はしていませんが、内容的にはDDDに沿っていますので、イメージしやすくなると思います。
また、著者の増田さんはDDD実践者の第一人者の一人です。
[Slideshere](https://www.slideshare.net/masuda220)でDDDについて多くの解説がありますので理解の助けになると思います。

## STEP2
ここからより深くDDDについて理解していくための資料を紹介します。

### Domain Driven Design（ドメイン駆動設計） Quickly 日本語版
![frontcover_ja_small.png](https://qiita-image-store.s3.amazonaws.com/0/43738/6799d91d-8e90-5d3e-6d48-cbbf416fbb15.png)

https://www.infoq.com/jp/minibooks/domain-driven-design-quickly

エリック・エヴァンスのドメイン駆動設計の書籍の内容を要約したものです。
エリック本を読み始める前に読むといいと思います。
#### 

#### エリック・エヴァンスのドメイン駆動設計
![51rgnUkmlzL.jpg](https://qiita-image-store.s3.amazonaws.com/0/43738/2df7124c-09be-3626-5834-dca965d3abe4.jpeg)
https://www.amazon.co.jp/dp/4798121967/

ここでやっとエリック本を紹介します。
DDDの原典ですので、DDDのすべてが書かれています。
ただ2003年に刊行されてますので、一部古くなっている記載がありますが
それを踏まえても名著だと思います。

また[DDD難民に捧げるDomain-Driven Designのエッセンス](https://www.ogis-ri.co.jp/otc/hiroba/technical/DDDEssence/)を並行して読むのをオススメです。
DDDの用語集として理解の助けになると思います。

## STEP3
ここからより具体的に実践と実装方法について学べる資料を紹介します。

### 実践ドメイン駆動設計
![91aTKucFSKL.jpg](https://qiita-image-store.s3.amazonaws.com/0/43738/7dedefa7-7d57-b8e3-f48a-6352cebf3f69.jpeg)
https://www.amazon.co.jp/dp/479813161X/

通称IDDD本
具体的なコードを元に、実践的なDDDのやり方が書かれています。
技術的な内容になってますので、人によってはエリック本より先に読むのもありかなと思います。
要約として[「実践ドメイン駆動設計」 から理解するDDD (2018年11月)](https://www.slideshare.net/AtsuoAoki/ddd-201811)というスライドがあります。
読み終わったあとに内容を整理するのに助けになると思います。
↑書籍版が出てます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43738/a5b3ef2b-d26f-30f1-2638-37e56e0f9b84.png)

https://www.amazon.co.jp/dp/4798161500/

### .NETのエンタープライズアプリケーションアーキテクチャ第2版
![51c52CsHWTL.jpg](https://qiita-image-store.s3.amazonaws.com/0/43738/6afe4052-da99-3238-4a6a-08f5b1b393b3.jpeg)
https://www.amazon.co.jp/dp/B00ZQZ8JNE/

.NETとありますが、コードサンプルが.NETベースなだけで他の言語でも適用可能な内容になってます。 DDD、CQRS(Command/Query Responsibility Segregation)、イベントソーシングを中心にアーキテクチャ設計の原則の実践と実装方法について書かれています。
この本の特徴としてCQRSとイベントソーシングの具体的なソース例があるところです。
私はまだ読んでる途中ですが、CQRSとイベントソーシングを採用しようとしたときに参考になりそうだと思いました。
### その他オススメ資料
- [ドメイン駆動設計基礎講座〜戦略編〜](https://speakerdeck.com/j5ik2o/domeinqu-dong-she-ji-ji-chu-jiang-zuo-zhan-lue-bian)
- [DDD with RDRA, ICONIX](https://speakerdeck.com/j5ik2o/ddd-with-rdra-iconix)
- [ボトムアップドメイン駆動設計　前編](https://speakerdeck.com/nrslib/bottomup-ddd-1)
- [ボトムアップドメイン駆動設計　後編](https://speakerdeck.com/nrslib/bottomup-ddd-2)

ここまで紹介してきた資料を読破できたなら、DDDについて大分理解ができる人になってると思います。
ただそれでも分からないことが出でくると思いますのでコミュニティに頼るのも手です。
DiscordにDDDのコミュニティがありますので参加してみてはいかがでしょうか！
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">「DDD Study Group」という名前でDiscordコミュニティ作成しました！<br>ご参加頂いた方とこのグループ内で、具体的に今後の活動について話していきたいと思います。まずは自己紹介channelで自己紹介いただけると嬉しいです！<a href="https://twitter.com/hashtag/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E9%A7%86%E5%8B%95%E8%A8%AD%E8%A8%88?src=hash&amp;ref_src=twsrc%5Etfw">#ドメイン駆動設計</a> <br>↓招待リンク<a href="https://t.co/FDhCcS6bho">https://t.co/FDhCcS6bho</a> <a href="https://t.co/TGsSNUQ4vu">https://t.co/TGsSNUQ4vu</a></p>&mdash; 松岡@DDDブログ書いてます (@little_hand_s) <a href="https://twitter.com/little_hand_s/status/982979772157313025?ref_src=twsrc%5Etfw">2018年4月8日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以上、ここまで読んでくださった方々の助けになれば幸いです。