Kindleで購入。2週間くらいかけてダラダラと読んだのでかなり内容忘れてる部分もありますが、さらっと読み直しながら感想とか。


現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法

内容


「解り易いコードを書く」というところから始まって「ロジックの整理・組み合わせ」の後に「DBやWebAPIの設計について」まで記述してあり、ソフトウェア開発全体についてかなり広い範囲を解り易く記述してある本でした。だいたい、技術書は後ろの章に行くほど書いたあることが難解になることが多い気がするのですが、そんなことはなかったです。

サンプルコード

「サンプルコードはJava、フレームワークはSpring FrameworkとSpring Bootで記述してあるので理解しにくい箇所があるかも…」と前書きに書いてありますが、サンプルコードも少な目かつ必要最低限な量で書いてあるので、Javaをやったことないとかコード読むのが苦手とかいう人でも読むのは難しくないです。たぶん。どなたかの書評で「コードが多め」と書いてあった(気がする)ので、Martin Fowler氏のリファクタリングの本くらいガッツリコードが書いてあるのかと身構えましたが、そんなことなかったです。

1・2章

とにかく、意味のある単位で小さく作ってそれらを組み合わせるということが本全体の中で何度も出てきていました。1章と2章で良いコードの書き方に触れてあってここの部分で書いてある「小さく作る」が後の章でも重要になってくるような感じ。ただ、内容的には他の本にもよく書いてあるようなことでした。

3章

所謂、データとロジックを同じクラスに書きましょうという話。具体的なクラスの設計方法について記述してあるので、クラスの設計がわからんというような私のようなタイプには良い内容でした。この章に限らずですが、改善前後のサンプルコードが記述してあるので実際にどうすればよいのかイメージがつかみやすいです。

この辺りから「設計は改善の繰り返し」という言葉がでてきます。

4・5章

ここからDDDの話になってきます。実際の業務をどのようにコードに落としていくかという内容が書かれています。特にドメインオブジェクトの見つけ方は参考になりました。この章は正直理解が浅いのでもっとちゃんと読む必要がある…。

6章

主にデータベースの役割と設計についてです。命名や制約等をちゃんとやりましょうという内容です。ただ、いかなる場合もNULLはいけないという記述があったのですが、これに関しては私はnullableなカラムを作ることもあるので「う~ん、そこまで全部NOT NULLにする必要あるかなぁ…」と思いました。特に、日付関連のカラム(deleted_atとか)ってnullableにしませんか…?

しませんか? と書いておきながら最近Mattermostのテーブルを見たときは日付関連のカラムはUNIX Timeでデータが入っておりdeleted_atカラムは0が入っていて、なるほどな~と思ったりもしたのですが…。

7章

画面は複雑になりがちで、それに引きずられてコードが複雑になりがちなので、画面の表示ロジックとそうでないところを分離しましょうという内容でした。画面そのものを分割してしまう例としてAmazonの注文画面が挙げられていました。また、画面とドメインオブジェクトの並び順を一致させるという対処法も記述してあり、なるほどな~と思いました。

8章

アプリケーション間の連携方法として4つの方法が簡単に説明された後に、その中のWebAPIの実装方法について説明があります。RESTful APIの説明といって差し支えなかったとおもいます。たぶん。
どこまでをサーバサイドで行い、どこまでをクライアントサイドで行うか等についても触れられていました。APIも細かく作成し、組み合わせて使用することで柔軟に対応できるというような内容でした。

9章

開発の流れについてです。マネジメントよりな内容でした。が、開発者としてもきちんと頭に入れておく必要があるような内容でした。結局、業務の内容と実装の両方できなアカンなぁ…ということを改めて思いました。

10章

オブジェクト指向をどうやって学ぶかというような内容で、前半は1~3章の総括的な内容でした。後半の内容で「古い習慣から抜け出すためのちょっと過激なコーディング規則」というのがあったのですが、ここの「エンティティを小さく保つガイドライン」と「1つのクラスのインスタンス変数は2つまで」と「getter・setter・プロパティは使わない」はちょっとやりすぎではないかと思った…。

まとめ


4章以降はそれなりの実装経験がないと(特に業務関連部分やDB周りとか)少し読み辛いのではないかと思いましたが、全体を通して「設計を学ぶにもどうすればいいのかわからん」という人には最適な本だったと思います。内容も非常に幅広く取り扱っている割には丁寧で解り易く、かなり言葉を選んで書いてあるような感じでした。4章の辺りはもう少し読んで理解を深める必要があると感じました。いままで自信なく実装していた部分もこの本で記述されていたりして自信が持てました。また、自分は実装中にスクラップ & ビルドをしまくるのですが、この点は以前から自分の実力の無さが問題で、できる人は一から綺麗な設計・実装ができるものだと思い込んでいました。しかし、本書の中では「良い設計はひたすら改善が必要」という内容が繰り返し書かれており、この辺りの不安と自信のなさも多少払拭されてよかったです。

その他


私の場合は長期間かけて本を読むケースが多く、後から感想書き起こすのは結構キツイ(忘れている)ので、次回から別紙にメモとりながら読もうと思いました。