はじめに
こんにちは、SHOJIです。
「ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本」を読みました。想像していたよりもさらにずっと良い本でした。
ドメイン駆動設計入門ってどんな本?
プログラマなら避けては通れない?、エリック・エヴァンスのドメイン駆動設計、いわゆるDDDを理解しやすいパターンから解説している本です。
www.amazon.co.jp
避けては通れないと言いつつ、恥ずかしながら僕はまだ原典を読めていません。
原点を読もうとしたのですが、周囲の評判や書籍のレビューを読むにワンクッション挟まないと理解に苦しみそうと感じ、本書を先に読みました。
書籍の構成
目次
- ドメイン駆動設計とは
- システム固有の値を表現する「値オブジェクト」
- ライフサイクルのあるオブジェクト「エンティティ」
- 不自然さを解決する「ドメインサービス」
- データにまつわる処理を分離する「リポジトリ」
- ユースケースを実現する「アプリケーションサービス」
- 柔軟性をもたらす依存関係のコントロール
- ソフトウェアシステムを組み立てる
- 複雑な生成処理を行う「ファクトリ」
- データの整合性を保つ
- アプリケーションを1から組み立てる
- ドメインのルールを守る「集約」
- 複雑な条件を表現する「仕様」
- アーキテクチャ
- ドメイン駆動設計のとびらを開こう
- ソリューション構成
最初にDDDとは何ぞや?の話があり、その後、DDDにおける重要なキーワードがどのようなものかを解説していくという構成です。
チャプター2の値オブジェクトの説明の時点で、実際の使用を想定したコードが記載されており、章を追うごとに、①新たに解決したい課題、②その解決に役立つDDDの概念、③概念を適用したコードの3点セットで解説がなされるので、非常に理解がしやすいです。
チャプター6までに基本的なキーワードの解説があり、チャプター7からはデザインパターンと組合せてプログラムの設計をブラッシュアップしていきます。最後にはソフトウェアアーキテクチャを取り入れた設計についても触れられています。
読んだ感想
原典を読めていないため、DDDをどの程度網羅しているのかは分かりかねますが、本書単体で見れば非常に良い本でした。
ある程度の経験があれば、自身の経験や有識者の考えに触れる中で持っている自分なりの「良い設計」があると思いますが、それを分かりやすく体系化してくれています(体系化の作業はDDDの功績なのでしょうが、分かりやすさでいうと本書の功績は大きいはずです)。また、僕の場合は、自分なりの「良い設計」では答えを出せていなかったところや、そもそも問題と認識できていなかったところについても触れられており、今後書くコードに活かせる知見がたくさんありました。
新入社員向けにクラスやメソッドをどう設計するのがいいか、といったレクチャーをするときにも使えそうです。後半は経験が少ないと理解は難しいかもしれませんが、前半は取っつきやすいので、リーダブルコードあたりとセットにすれば、プログラマの言う「分かりやすい」がどういうものなのか知ってもらえるんじゃないかと思います。
ただ、書籍内でも触れられていましたが、いささかパターンに偏った構成になっている感じはあって(分かりやすさのために仕方ないとは思います)、このパターンの土台となる思想は原典を読んで理解する必要があるなと思いました。
土台となる考え方というのは、往々にして抽象的で分かりにくいものなので、そういう意味では分かりやすかったことで逆に欠けている部分があるように感じられました。
おわりに
原典は読まないといけないし読むんですけれど、他にも読みたい本が多すぎて、すぐには読めなそうです。
ただ、案件の募集に「DDDに基づいた設計ができること」のような記載がある程度には知ってて当たり前のものになっているので、時間を見つけて少なくとも一回は読んでおかないとまずいなと思っています。
本でいうと読む読む言いながら読めていない本だらけなので、年内に読めたらいい方かな。