そこに仁義はあるのか(仮)

略してそこ仁!

わかりやすく設計を学べる『良いコード/悪いコードで学ぶ設計入門』を読んだ!

ミノ駆動さんから献本いただいた「良いコード/悪いコードで学ぶ設計入門」を読みました!既に何度も重版されているベストセラーで、読んでいてもとてもわかりやすかったのですごくオススメです!
(かなり前にいただいたのに、このタイミングになってしまった…!)

🙆‍♀️ こんな人にオススメ

「システム開発しているけど、可読性が低かったり変更しにくかったりと開発に課題がある。けど、レガシーコード改善ガイドを読むのはハードルが高い‥!明日からでも実践できるような、わかりやすく設計を改善できる方法が具体的に知りたい!
という方に特にオススメです。もちろん、最初から良いコードを書きたいという人にもオススメ。

タイトルにもある通り、コードを読みながら設計を改善していく具体的な方法について学べます。
本全体を通して、

  1. 悪いコードが与える変更容易性への悪影響を確認
  2. 設計の改善方法について説明
  3. 良いコードの書き方を解説

という流れで整理されているので、なんでこのままのコードではいけないのかを納得しながら読み進めることが出来ると思います!

目次

  • 1 悪しき構造の弊害を知覚する
  • 2 設計の初歩
  • 3 クラス設計 ―すべてにつながる設計の基盤―
  • 4 不変の活用 ―安定動作を構築する―
  • 5 低凝集 ―バラバラになったモノたち―
  • 6 条件分岐 ―迷宮化した分岐処理を解きほぐす技法―
  • 7 コレクション ―ネストを解消する構造化技法―
  • 8 密結合 ―絡まって解きほぐせない構造―
  • 9 設計の健全性をそこなうさまざまな悪魔たち
  • 10 名前設計 ―あるべき構造を見破る名前―
  • 11 コメント ―保守と変更の正確性を高める書き方―
  • 12 メソッド(関数) ―良きクラスには良きメソッドあり―
  • 13 モデリング ―クラス設計の土台―
  • 14 リファクタリング ―既存コードを成長に導く技―
  • 15 設計の意義と設計への向き合い方
  • 16 設計を妨げる開発プロセスとの戦い
  • 17 設計技術の理解の深め方

6 条件分岐 ―迷宮化した分岐処理を解きほぐす技法―

この本は「設計」のための本なんだなと特に認識できる章だなと思いました。細かいコードの書き方だけではなく、クラス図なども使いながらどうやってクラスを設計していくのかの解決方法を提示してくれています。
条件分岐について取り扱っている6章では、コードが複雑になりがちな条件分岐に対してストラテジーパターンやポリシーパターンを用いた解決方法が説明されています。
(私が読んだ本はそんなに多くないですが)ストラテジーパターンをとてもわかりやすく説明してくれていて、「こういう風に書けば良いのか!」と理解ができる内容だと感じました。

10 名前設計 ―あるべき構造を見破る名前―

10章の名前設計についても、「名前設計」だけ聞くと「メソッド名やクラス名、変数名について注意していきましょう」というよく言われる指摘を思い浮かべる人もいると思います。
この本では、そこから更にもう一段階問題に踏み込んで、「関心事を意識した名前設計をする」ことが大切だと書かれています。

「商品」という名前を付けるのではなく、関心事が何かを意識してビジネスの目的に合った名前にする。例えば「予約」が関心事であれば「商品」よりも「予約品」、「在庫」が関心事であれば「商品」よりも「在庫品」にする、と解説されています。
これはドメイン駆動設計(そしてマイクロサービス)にも繋がる境界づけられたコンテキストとも深く関わるプラクティスだと思います。
名前という切り口でシステムを疎結合にしていく方法を学べました。

16 設計を妨げる開発プロセスとの戦い

16章では実際にコードを改善していく際に起こりうる、心理的問題やコミュニケーション、組織の課題と対処法について書かれています。
読んでいて「自分の組織も確かにそうだな」と思う人も多いのではないでしょうか。
大事なことはスモールステップで始めていく、そして、自分から始めて少しずつ広げていくことです。そういったアプローチについても丁寧に説明されています。

💬 まとめ

読みやすくサクサク学んでいきながらも大切なプラクティスをたくさん学べました!
チームメンバーと一緒に読み進めていきながら、少しずつプラクティスを適用していく、その時のヒントとして利用できる本だと思います。

一緒に「現場で役立つシステム設計の原則」を読むと、理解を更に深められると思いました!
ミノ駆動さん、素敵な本をありがとうございました!

syobochim.hatenablog.com