Closed5
良いコード / 悪いコードで学ぶ設計入門 を読んで
ピン留めされたアイテム
を読んで、学んだこと、感想をメモしていく。
1章 悪しき構造の弊害を知覚する
業務契約サービスを例に、数十箇所で税込み計算ロジックが実装されている状況の話があった。
このような事態は、データを保持するクラスと、データを使って計算するロジックが離れているときに頻発する。関連するデータやロジックどうしが分散し、バラバラになっているのを低凝集と言う。
3章 クラス設計
処理の対象外となる条件をメソッドの先頭に定義する方法をガード節という。
インスタンス変数を不変 (イミュータブル) にしたときに、変更したい場合は、新しいインスタンスを作成するメソッドを生やす。
インスタンス変数の不正状態から防御するのは、Rails とかだと、Validator クラスを作ればいいかなと思った。
値オブジェクトとは、値をクラス (型) として表現する設計パターン。値をクラスとして表現することで、各値それぞれのロジックを高凝集にする効果がある。
4章 不変の活用
副作用とは、関数が引数を受け取り、戻り値を返す以外に、外部の状態 (変数など) を変更すること。
関数 (メソッド) には、主作用と副作用がある。
- 主作用: 関数 (メソッド) が引数を受け取り、値を返すこと
- 副作用: 主作用以外に状態変更すること
副作用のある関数は、影響範囲がどこまで及んでいるのか推測が困難なため、関数が影響を受ける・与える範囲を限定するのが確実
- データ、つまり状態を引数で受け取る
- 状態を変更しない
- 値は関数の戻り値として返す
コード外とのやりとりは局所化する
リポジトリパターンは、データベースの永続化処理をカプセル化する設計パターン
5章 低凝集
プリミティブ型執着では、強く関係し合うデータとロジックをうまく凝集できない。
プリミティブではなくクラスの型を返すとロジックが凝集する。
このスクラップは2022/11/16にクローズされました