『良いコード/悪いコードで学ぶ設計入門』
https://gyazo.com/ba04acdafe5c2acd21ea646fec9a0ecd
2022/4/30
言語はJavaらしい
書評
uhyo氏の書評
uhyo氏の書評、めっちゃ良いなmrsekut.icon
この本はJavaもしくはそれにかなり類似したパラダイムを持つ言語を使う人が読んだほうがよいと思います。
本書は対象読者をオブジェクト指向プログラミング言語の使用者としていますが、実際のところ内容はかなり「クラス設計」に重きを置いています
書評。長い
めちゃくちゃ売れてるらしいmrsekut.icon
割とOOPが前提されている
OOPに内在する嫌さとどう戦うか、という感じの内容も多い
関数型ならそもそもそこは考える必要がない
ただ、命名とか、凝集性とか、パラダイムに依存しないものも紹介されている
classの作り方と、moduleの作り方には類似性はあるので、そういう読み方ができるならOOPじゃない人も読めそう
具体例が、あー、あれね、となって良いと思うmrsekut.icon
設計や良いコードに関心がある人が読むと、知っとるわい!という内容が多い印象
コードに色がついていなくて読みづらい
1 悪しき構造の弊害を知覚する
あるあるの悪いコードの例示をいくつか
2 設計の初歩
どこかで見たことのある内容
3 クラス設計 ―すべてにつながる設計の基盤―
OOP感満載だmrsekut.icon
OOP言語触る時に読もうmrsekut.icon
4~9章
4 不変の活用 ―安定動作を構築する―
4.1 再代入
4.2 可変がもたらす意図せぬ影響
4.3 不変と可変の取り扱い方針
5 低凝集 ―バラバラになったモノたち―
5.1 staticメソッドの誤用
5.2 初期化ロジックの分散
5.3 共通処理クラス(Common・Util)
5.4 結果を返すために引数を使わないこと
Column C#のoutキーワード
5.5 多すぎる引数
5.6 メソッドチェイン
6 条件分岐 ―迷宮化した分岐処理を解きほぐす技法―
6.1 条件分岐のネストによる可読性低下
6.2 switch文の重複
Column クソコード動画「switch文」
6.3 条件分岐の重複とネスト
6.4 型チェックで分岐しないこと
6.5 interfaceの使いこなしが中級者への第一歩
6.6 フラグ引数
7 コレクション ―ネストを解消する構造化技法―
7.1 わざわざ自前でコレクション処理を実装してしまう
Column 車輪の再発明
7.2 ループ処理中の条件分岐ネスト
7.3 低凝集なコレクション処理
8 密結合 ―絡まって解きほぐせない構造―
8.1 密結合と責務
Column クソコード動画「共通化の罠」
8.2 密結合の各種事例と対処方法
9 設計の健全性をそこなうさまざまな悪魔たち
9.1 デッドコード
9.2 YAGNI原則
9.3 マジックナンバー
9.4 文字列型執着
9.5 グローバル変数
9.6 null問題
9.7 例外の握り潰し
9.8 設計秩序を破壊するメタプログラミング
9.9 技術駆動パッケージング
9.10 サンプルコードのコピペ
9.11 銀の弾丸
10 名前設計 ―あるべき構造を見破る名前―
ただ、分節ができた前提で、名前を分けよう、書かれている感じがする
まず難しいのは分節することだろう
ヒントとして、目的を考える、とかは書いてる
11 コメント ―保守と変更の正確性を高める書き方―
無
12 メソッド(関数) ―良きクラスには良きメソッドあり―
12.1 必ず自身のクラスのインスタンス変数を使うこと
12.2 不変をベースに予期せぬ動作を防ぐ関数にすること
12.3 尋ねるな,命じろ
Column クソコード動画「カプセル化」
12.4 コマンド・クエリ分離
12.5 引数
12.6 戻り値
Column メソッドの名前設計
Column staticメソッドの扱いに注意
13 モデリング ―クラス設計の土台―
13.1 邪悪な構造に陥りがちなUserクラス
13.2 モデリングの考え方とあるべき構造
13.3 良くないモデルの問題点と解決方法
Column クソコード動画「Userクラス」
13.4 機能性を左右するモデリング
14 リファクタリング ―既存コードを成長に導く技―
14.1 リファクタリングの流れ
14.2 ユニットテストでリファクタリングのミスを防ぐ
14.3 あやふやな仕様を理解するための分析方法
14.4 IDEのリファクタリング機能
14.5 リファクタリングで注意すべきこと
Column Railsアプリのリファクタリング
15 設計の意義と設計への向き合い方
15.1 本書はなんの設計について書いたものなのか
15.2 設計しないと開発生産性が低下する
15.3 ソフトウェアとエンジニアの成長性
15.4 課題を解決する
15.5 コードの良し悪しを判断する指標
Column クラスを分割すると読みにくくなる?
15.6 コード分析をサポートする各種ツール
Column シンタックスハイライトを品質可視化に利用する
15.7 設計対象と費用対効果
15.8 時間を操る超能力者になろう
16 設計を妨げる開発プロセスとの戦い
16.1 コミュニケーション
16.2 設計
16.3 実装
16.4 レビュー
16.5 チームの設計力を高める
17 設計技術の理解の深め方
17.1 さらにステップアップするための設計技術書紹介
Column バグ退治RPG『バグハンター2 REBOOT』
17.2 設計スキルを高める学び方
Column C#と長き旅,そして設計への道