「現場で役立つシステム設計の原則」を読み終わりました

現場で役立つシステム設計の原則を一通り読み終えたので書評です。

現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法:書籍案内|技術評論社

購入のきっかけ

著者の方が @masuda220 さんということで購入しました。
DDDに関する資料を拝見させていただき、色々と学ぶことが多かったです。
著者の方の経験をもとに書かれたということだったので、「これは買わねば」と思い買いました。

評価

10段階評価で言えば10点満点と私は思います。

開発者必携の一冊なんじゃないかなぁと思う内容でした。
できれば、チームメンバー全員に読んでほしいと思うくらいです。

オススメできる人
  • 基本的な開発ができる人(経験年数的には3年以上といったところ)
  • エリックのDDD本を読んで難しいと感じた人
オススメできない人

個人的に開発者必携だと思っているのですが、あえてあげるとしたら下記のような人です。

  • 開発経験が浅い人(経験年数的には3年未満といったところ)

経験年数3年未満とは書きましたが、あくまで目安です。
リレーショナルモデルやWebAPI、開発プロセスといった部分があるので、
もしかしたら、ピンとこない部分があるかもしれません。

感想(ざっくり)

どうすれば変更しやすいソフトウェアを設計ができるかといった内容です。

大まかな構成としては下記のような感じだったかなぁと思います。

前半;ステップ単位でのコードの書き方
中盤:オブジェクト指向に基づいた変更しやすい設計について
後半:オブジェクト指向設計を実践するための開発手法

感想詳細(前半)

1章/2章はコードの書き方や名前の付け方など、まさにリファクタリングの内容でした。
3章は変更しやすいオブジェクト指向への道筋が見えるような内容だなと思いました。

動くコードが書けるようになった人はこの辺りを読むと非常に勉強になると思います。

感想詳細(中盤)

中盤からドメインモデルという言葉出てきて、DDDの実践的な内容になってきたなといった感じです。
ドメイン/アプリケーション/プレゼンテーション/データソースといった各レイヤの説明も出てきます。

ただ、エリックのDDD本を噛み砕いてかなりわかりやすい説明になっているので、
「DDD本を読んだけど、あんまり理解できなかった」と感じた人にも理解しやすいのではないかなと思います。
各サンプルは注文や口座など業務システムで使われそうな内容になっていて実践的です。

各レイヤごとの設計の仕方について書かれています。

第4章

ドメインモデルの見つけ方/育て方といった内容です。

おそらく実際の開発ではドメインモデルの見つけるのは難しいと思っています。
なので、ドメインモデルの見つけ方は非常に勉強になりました。

育て方も実際の開発で悩むことが多そうな部分だと思います。
getterを使って参照側で計算というのをやりがちなので、
育て方といった部分もかなり勉強になりました。

第5章

ドメインモデルを組み合わせて要件を満たすアプリケーションレイヤについてです。

アプリケーションレイヤの各サービスを組み合わせて、
シナリオクラスを作るといったところについては「なるほど」と思う内容でした。

第6章

データソースレイヤの説明ですが、
ここはリレーショナルモデル設計の面が強いと感じました。

ただ、ドメインモデルが全く関係ないかと言われるそうではなく、
ドメインモデルを設計した上でのリレーショナルモデルの設計といった感じです。

「UPDATE文は使わない」のところは個人的にはちょっと考えさせられる内容でした。
確かに正規化を進めていくと未入力状態がある場合は対象テーブルに存在しない状態になる。
というのは理解できるので、確かにDELETE -> INSERTにはなるかもなぁという想像はしています。

第7章

プレゼンテーションレイヤの説明ですが、画面設計的な話にも踏み込んでいます。
ドメインモデルと画面を連動させるという部分については「なるほど」と思いました。

感想詳細(後半)

後半はオブジェクト指向の設計からちょっと俯瞰した視点になっているような気がしました。

8章ではアプリケーション間の連携で非同期通信やWebAPIについての話です。
WebAPIのレスポンスを返すときのドメインモデルとの連携に仕方などです。
どちらかというとWebAPI設計が中心だったような気がします。

9章では開発の進め方について書かれています。
この章は開発者向けというよりはマネージャー向けといった印象を受けました。

10章では学び方と教え方だったのですが、
学び方といったところを書かれている書籍は少ないので
こういった章があるのはありがたいです。