Open5
【改訂新版】良いコード/悪いコードで学ぶ設計入門 個人メモ

基本的にアクティブリコール用のメモです。

第1章 悪しき構造の弊害を知覚する。
悪いコードのパターン
- 意味不明な命名
- ネストの階層が深い
- データ格納のみを目的としたクラス
- コードの重複を招く
- 可読性の低下
- 修正漏れ
- 生焼けオブジェクトの原因となる
- 不正値の混入

第2章 設計の初歩
変更容易性を高める設計手法
- 省略せずに意図が伝わる名前を設定する
- 変数を使い回さず、目的に応じて変数を用意する
- 再代入を避ける
- ベタ書きせず、目的ごとのまとまりでメソッド化する
- 関心の分離
- 関連のあるデータとロジックをまとめてクラスにする
- カプセル化

第三章 カプセル化の基礎
変更容易性を高めるための基礎
- カプセル化
- 関心の分離
- 多態性を用いた機能の取り替え
クラス単体で正常に動作するように設計する
データクラスは単体で正常動作するのが困難
他のクラスに依存しないと正常動作しないモデルを貧血ドメインモデルと呼ぶ
クラスが自分自身でドメインモデルの完全性を保証する
データやロジックが欠損や不整合を持たず、正常な状態である=ドメインモデルの完全性
ドメインモデルの完全性を保証することで、クラスの完成度が高まる
クラスの完成度が高まることで全体の完成度が高まる
頑強なクラスの構成要素
クラスの基本的な構成要素は以下
- インスタンス変数
- メソッド
良いクラスの構成要素
- インスタンス変数
- 完全性を保証するようにインスタンス変数を操作するメソッド
自身のクラスのインスタンス変数をメソッドで操作することが重要

第三章 カプセル化の基礎(つづき)
成熟したクラスへ成長させる設計術
- コンストラクタで正常値を設定する
- 生焼けオブジェクトを作らない
- 計算ロジックをデータ保持側に寄せる
- 不変を利用して予期せぬ変更を防ぐ
- 変更したい場合は新しいインスタンスを作成する
- メソッド引数やローカル変数にも不変を適用する
- 値の渡し間違いを型で防ぐ
- プリミティブな型ではなく独自の型で扱うことを検討する
- 現実の営みにはないメソッドは追加しない