プログラミング言語

「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」読み終わり

先日より、ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本を読んでおりましたが、読み終わりました。
非常に読みやすくて、素晴らしい内容だと思いました。
特に自分のようなドメイン駆動開発の経験がない人が学び始めるときに、まずは最初に読むと良いと思います。

自分が読み進めていく中で、本の内容も基本と応用の2つに分けられると感じましたので、それぞれ感想を書いていきたいと思います。

基本

ここ2,3年でドメイン駆動開発について目にする機会がより多くなりました。

まず最初にドメイン駆動開発とはなにか説明があります。
ドメイン駆動開発とはなんだろうと思って調べ始めて、多くの人が感じるのが言葉の難解さだと思います。
戦略、戦術からはじまってユビキタス、境界づけられたコンテキストなど色々あると思いますが、どうしても身構えてしまいます。
そしてドメインと言う言葉も、なんだかよくわからないですよね。
ここで重要なのは本のタイトルにボトムアップと記載されている点です。
本書は、ボトムアップと名がついている通り1章からドメイン駆動開発の未経験者に非常に優しい内容になっています。

各章の内容を簡単にご紹介しようとおもったのですが、この本自体が非常に読みやすいため読んでもらったほうがよいと思います。
書店などの店頭やサービス等で1章とできれば2章の値オブジェクトまで読むと、次も読みたくなっていくと思います。
自身の経験から現場でもこういう経験あったなーと共感できる内容が記載されています。

これは全章通して言えるのですが、普通の本では説明が大変で紙面の関係で詳細は割愛させてもらいます。としてしまうところが、本書では結構踏み込んで具体的な実装案まで書いてあることが多いです。
例えば、データベースのテーブルのidが自動採番の場合どうするかなど、おそらく誰もが立ち向かわなければならないことが転ばぬ先の杖のように記載されています。
もちろん、色々な問題や環境によって答えは異なると思うのですが、非常に参考になることが多いと思います。
偉そうなことを申すかもしれませんが、現場で発生しそうな課題についてここまで突っ込んでいる本はあんまり読んだことがないですね。

応用

10章までは値オブジェクト、エンティティ、依存関係など基本的なことを学びます。
風向きが変わるのが11章からだと思います。
自分はddd未経験ですが、DroidKaigiの過去動画などを見て戦術的な取り組みはなんとなくコードで想像することができる部分も多かったです。
しかし、集約については能力不足でイマイチ想像することができませんでした。
本書では12章で集約が説明されます。ですが11章は集約を学ぶための布石のような章で、実際にユースケースを定めてプログラムを行います。
あえてだと思うのですがプログラム内で少し変な感じのコードが示され(実際に同様なコードを見ることもあります)、これを解決するための手法として集約が出てきます。
この流れは本当に素晴らしくて、集約を学ぼうとしていきなり12章を読むよりも、11章で実際に体験してから12章の集約に進むこでより理解しやすいと思います。
偉そうに書いてますが、自分で集約を人に説明できるほど理解できていないのですが、それでも集約がどのようなものを解決しようとしているか想像できるようになりました。

そして最後の章で、ようやく戦術的として語られるユビキタス言語や境界づけられたコンテキストなどの説明があります。
普通のDDDの本だと最初に記載されそうなところですが、本書では最後に記載されます。
本当にボトムアップを徹底しているなと思いました。お陰様で最後まで読むことができました。

最後の章が最後じゃない

最後の章で終わらないのも、本書のすごいところだと思います。
実は、読み進めてサンプルコードを写経していく中で疑問に思っているところがありました。
それはどのようなパッケージ構造にするかということです。
最近はそこまででもないかもしれませんが、パッケージ構造は自転車置き場の議論になりやすいと思います。
Appendixにパッケージ構造について記載があります。ぜひ、本書を読んでほしいので具体的な内容は記載しませんが、自分は納得できるパッケージ構成になっていると思いました。
なので、本書を読まれているかたも全章読んでも必ずAppendixまで読み進めてほしいです。

終わりに

今まで色々な技術系の本を買っておりますが、人生で覚えている限り最後まで読み進めた2冊目の本になりました。
DDDは本当に難しいところが多くて、特に周りに経験者がいないとなると経験を積むのはそれなりに難しいと思います。
本書は、ボトムアップと記載されている通りいわゆる軽量DDDから実践してみようという形式の本です。
軽量DDDだけ行うのはアンチパターンと言われております。DDDから見るとそうかもしれませんが、それでもプログラムをよりよくするという点からだけみるとアンチパターンでもないのではないかなと思います。
自分のようなDDDの経験はないけどエリック・エヴァンスのドメイン駆動設計 (IT Architects’Archive ソフトウェア開発の実践)をいきなり読むと買って満足するかもしれないという人にとっては、本当におすすめできると思います。
戻れるなら新入社員のときに読みたかったです。そのくらい意識が大きく変わると思います。
次はエヴァンス本・・・と思いましたが、もう一度最初から読んで理解をより深めたいと思います。

-プログラミング言語

© 2020 ビー鉄のブログ Powered by AFFINGER5