良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方
を読んだ
マスタカと言えばプログラマー
そんなわけで設計が重要なので本書を読んでみた
まずは1〜8章の前半部分
以下、内容
・本書の内容
コード例を出しながら問題を見せて解決していくスタイル
コードがあるのですごくわかりやすい本だった
・低凝縮
関連するデータやロジックがバラバラになっている状態
消費税の計算ロジックが色々な場所に記載されていて多数修正する必要があるのが一例
修正漏れが発生するのでデータの側に一箇所だけロジックを置くようにする
・正しいクラス
構成部品であるクラス1つ1つが品質的に完結していることにより、ソフトウェア全体の品質が向上する
そのために、インスタンス変数を不正状態にさせない仕組みを実施する
ローカル変数やstatic変数だとこの仕組みはできない
・生焼けオブジェクトを避ける
コンストラクタを設定して、必要なパラメーターで初期化できるようにする
・ガード節
不要な要素を先頭で除外する
コンストラクタならexceptionを投げる
if (amount < 0) { throw Exception("hogehoge") }
・ファクトリメソッドの検討
オブジェクトの生成ロジックが増えたらファクトリメソッドを検討するタイミング
プレミアムメンバー、標準メンバーみたいなものが増えたら対応するイメージ
・staticメソッドにしても良い場合
横断的な関心ごとはstaticにする。具体的には以下
ログ
エラー
デバック
例外
キャッシュ
同期処理
分散処理
・デメテルの法則
利用するオブジェクトの内部を知るべきでない
・尋ねるな、命じろ
他のオブジェクトの中身を尋ねたり、呼び出し側で判断したりせず
呼び出し側は命ずるだけで命令を受けた側で適切な制御するように設計する
・ストラテジパターン
interfaceを切ることで、switch文を使わずに切り替える
・リスコフの置換原則
上下の振る舞いが変わらないこと
https://zenn.dev/chida/articles/5373e135be11f0
・DRYにすべきでないもの
似ているロジックであっても、概念が違えばDRYにすべきではない
まだまだ続くよ
関連記事:
- 現場で使える Flutter開発入門の4章を読んで不明点を調べた
- iOS 15 Programming Fundamentals with SwiftのI-5とI-6を読んだので不明点をまとめる
- JetpackComposeでPaging3を使ってみた