『ドメイン駆動設計をはじめよう』を読んだのでその感想です。
訳者の増田亨さん(@masuda220)から献本頂いた本で、改めてお礼申し上げます。
この本の見どころとしては、ドメイン駆動設計(以下、DDD)の概念を以下のような表現に訳しているところでした。
結果的に、この試みは日本人にとってDDDが理解しやすいものになったのではないかなと思います。
特にDDDの初学者や、エヴァンス本などのDDDの本を読んだことがあるが咀嚼ができていない中級者にはピッタリだと思いました。
というのも、私は以前、エンジニアではないメンバーにエリック・エヴァンスのドメイン駆動設計の説明をしたことがありました。
要は事業活動をモデリングして、そのモデルを中心に議論していきましょう。と言いたかっただけなのですが、初っ端「ドメインってなんですか」と質問をされた時に、うまく説明できずしどろもどろになったことがありました。
あの時に、この本を読んでいれば、もっとうまく非エンジニアにも説明できたかもと読んでいて思いました。そのような本です。
本の構成は以下です。
第I部 設計の基本方針
1章 事業活動を分析する
2章 業務知識を発見する
3章 事業活動の複雑さに立ち向かう
4章 区切られた文脈どうしの連係
第II部 実装方法の選択
5章 単純な業務ロジックを実装する
6章 複雑な業務ロジックに立ち向かう
7章 時間軸でモデルを作る
8章 技術方式
9章 通信
第III部 ドメイン駆動設計の実践
10章 設計の経験則
11章 設計を進化させる
12章 イベントストーミング
13章 現実世界のドメイン駆動設計
第 IV部 他の方法論や設計技法との関係
14章 マイクロサービス
15章 イベント駆動アーキテクチャ
16章 データメッシュ
結びの言葉
付録A ドメイン駆動設計の実践:事例研究
付録B 演習問題の回答
第I部の冒頭、「ドメイン駆動設計の考え方とやり方は戦略的設計と戦術的設計の大きく2つに分けられる」とありますが、この本を読む前に以下の概念図が頭にあるとわかりやすいかなと思いました。
古典ドメインモデリングパターンの解脱 - 大吉祥寺.pm - kawasima
これは、現実世界の事業活動を一気にコードにしようとするのではなく、事業活動をまず「モデリング」し、その後コードに「エンコーディング」するというドメインモデリングのプロセスを表している図です。 Runnable Specifications参照
私は、この「事業活動をモデリングする」部分の話が戦略的設計で、「コードにエンコーディング」する部分が戦術的設計と捉えており、本書の第I部(設計の基本方針)が戦略的設計の説明を、第II部(実装方法の選択)が戦術的設計の説明をされていると思って読んでいました。
リポジトリや値オブジェクトなど、戦術的設計の知識があるがうまくいっていない人は第I部を、戦略的設計はわかっているが、どういう実装の選択肢があるのかわからない人は第II部を読むと良いと思いました。
第III部(ドメイン駆動設計の実践 )は戦略的設計と戦術的設計を合わせたドメイン駆動設計の実践の話で、好きな章がたくさんありました。
例えば、第10章では、筆者の経験則から選択すべきアーキテクチャなどを体系的にまとめたフローチャートがあり、大変参考になります。
第11章では、事業活動の変化にともない設計も進化が必要で、設計方式の再検討によって起こる実装方針の見直しや、移行の仕方を紹介しています。
このあたりは、個人的に調べていたWardley Mappingと繋がりそうな話で、掘り下げたいなと思いました。
そして、第13章では、「とはいえ現実世界はメンバーのスキルの問題や既存コードがあってそんな簡単にドメイン駆動設計はできない」という書き出しで、ストラングラー方式による移行などを紹介しています。
第 IV部(他の方法論や設計技法との関係)では、マイクロサービスアーキテクチャやイベント駆動型アーキテクチャ、データメッシュを紹介しています。
最後に付録Aですが、これはこの本の一番の見どころかもしれません。
著者がスタートアップ企業で経験したドメイン駆動設計の失敗談が語られていて、本で紹介されている手法が筆者の実体験から得た生の経験則だとわかるので説得力が増しました。
まとめ
業務理解が大事だというところ(戦略的設計)と、それをどう実装するのか(戦術的設計)の両方の側面から書かれていてすごく良い本でした。
私の場合はエヴァンス本の咀嚼できてなかったところが、この本のおかげで理解につながったと感じていますし、逆にもう一度エヴァンス本を読み直して理解を深めたいとも思いました。
日本語訳は初級者や中級者には入りやすい言葉になっていて、第I部のところは非エンジニアにも読んでもらえるものになっていると感じました。