読むのがホネな技術書やビジネス書を取り上げて2週間の読書期限を課して読んでアウトプットする仮想読書会「デッドライン読書会」の第77回。同僚と読書期限を約束することによって積読が確実に減るという仕組み。過去記事はこちら。
さて、今回読む本は「ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法」だ。高い評価の原著を、ドメイン駆動設計に関してはエキスパートな増田さん*1が翻訳しており間違いない本というイメージ。
ちょっと骨太な印象があったので、2回(2週間×2)に分けて読むことにしている。というわけで本記事では「第Ⅰ部 設計の基本方針」「第Ⅱ部 実装方法の選択」までを読んだ感想を書いている*2。
前半までを読んだ感想
今回の記事のタイトルでもすこし意識しているのだが、本書の最大の特徴はドメイン駆動設計をやれと言っていないところ、というのが前半を読んだ感想だ。ドメイン駆動設計を説明しているのだけれども、むしろ適材適所で設計しろといっている。
- 第8章 技術方式 では明確に コンテキスト/サブシステム ごとに単一の技術方式で実装すべきではない という説明がされている
- 様々な設計手法を適切に適用すべき、という点で他の設計方式(トランザクションスクリプト等)もちゃんと紹介され、そのメリットや使いどころまで語られている
まだ最後まで読んでいないが、本書はドメイン駆動設計だけでなく過去の設計方式をカバーし、マルチパラダイム(様々な設計手法をミックスして使う)な設計を実現する書き方されており、非常に有用性が高い印象だ。
前半に関する細かい感想
訳語については好き嫌いがありそう
序文の後半に訳者コメントとして訳語についての説明があるのだけれども、本書は初学者の理解を促進するために、これまでに翻訳されてきたドメイン駆動設計とは異なる訳語を選択している。この考え方は大賛成だが、ユビキタス言語(本書では「同じ言葉」)やコンテキストマップ(「文脈の地図」)は、既存の知識がある人には難しい選択だったように思う。個人の感想です。
マルチパラダイムを選択するための前提としての第Ⅰ部
「第Ⅰ部 設計の基本方針」では、主にコンテキストマップ(「文脈の地図」)を描くところまでの業務分析の考え方が、ドメイン駆動設計をあまり意識させないような形で説明されている。
- とてもわかりやすく、ドメイン駆動設計しない人にもおすすめ
- そこそこの大きさと複雑さをもつ業務システムを検討する人は、むしろ積極的に読んでほしい
私が講師をしているドメイン駆動設計の講座でこの内容の説明を始めると、「私たちはソフトウェアを書くのが仕事です。事業経営をしているわけではありません。これを学ばないといけないんですか?」という質問が必ずでてきます。その答えははっきりしています。必要です。
ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法 1章 事業活動を分析する より
というわけで事業分析、業務分析について平易に語られているこのパートは貴重という印象だ。
ドメイン駆動設計だけじゃない第Ⅱ部
「第Ⅱ部 実装方法の選択」の良いところは冒頭でも書いたとおり、ドメイン駆動設計以外の(現代でも有効な)設計パラダイムが丁寧に説明されているところだ。例えばこのような形になっている。
第2章で見たように、すべての業務領域のソフトウェアを同じように作るわけではありません。業務領域のカテゴリーが異なれば、戦略的な重要性と複雑さが異なります。この章では、業務ロジックがかなり単純な場合に適した実装方法として、トランザクションスクリプトとアクティブレコードを取り上げます。
ドメイン駆動設計をはじめよう ―ソフトウェアの実装と事業戦略を結びつける実践技法 5章 単純な業務ロジックを実装する より
そう。重要なのは両方理解していて選択できることなのだ。
参考
訳者の増田さんによる本書の紹介スライドがあったのであわせて紹介しておく
speakerdeck.com
10章以降も興味深いトピックがたくさんある。そして(電子書籍で読んでいるので気づかなかったかが)付録には原著者の失敗談も盛り込まれているということで、楽しみだ。
続きの感想は2週間後に投稿予定である。興味があれば再訪していただきたい。
*1:現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法の著者。すいません、この本は興味があるのですが読めていません
*2:第Ⅲ部以降はまだ読めていない。他にも読んでいる本があって時間不足なのだ