Open4

『良いコード/悪いコードで学ぶ設計入門』の読書メモ

leoneleone

第1章

悪い構造が引き起こす弊害を3点例に挙げている。

  • 意味不明な命名
  • 複雑なネスト
  • 曖昧な設計で作られたデータクラス

最近改修したソースも、誤った命名やネストしたループ処理などがあって苦しんだので、あるある…と思って読んだ。
データクラスは今は使ってないけど、同じような処理が色んなところに、、というのはよくある話だな。
結局知っている人は知っているみたいな設計って良くないよなーそこが解消できるヒントが見つかると嬉しい。
あと命名難しいって口癖のように言っちゃうから、後続の章で命名のコツも知りたい気持ち。

leoneleone

第2章

設計の初歩として、以下に気をつけるべし。

  • 変数名を省略し過ぎない(意味がわかる変数名をつける
  • 変数は使いまわさない
  • 処理はひとまとまりにメソッド化
  • データとメソッドのまとまりはクラス化

まぁそうだよねという内容なのでサラッと。
クラス化は今はあまりできてないから、やるとしたらどこだろう…とちょっと考えた。

leoneleone

第3章

クラス設計の基本がまとまった章。
オブジェクト指向における、クラスベースの設計がこの本のベースになるそう。
クラスベースとは、データとそのデータを操作するメソッドをクラスとしてまとめ、それを用いてプログラムを構成すること。

ここではMoneyクラスを例にあげて、クラス設計のコツが書かれている。
データに必要な処理はなるべくクラスに集める=高凝集なクラスが理想とされる。
データに対する処理があっちこっちにあると、修正漏れとかバグの原因になるから良くない。
あと、たとえば金額に関する処理で、良かれと思って加減乗除の全部の処理を書いたとして、金額同士の掛け算って現実的にあるのか?と考えることも大事。
現実の仕様に沿わないものは含めない。
確かに、プログラム脳で勢い良く実装すると現実世界で不必要な処理を書いてしまうケースはありそうだから注意したい。

leoneleone

第4章

不変(イミュータブル)を活用する。
可変な変数やインスタンスは、上書きが可能のため意図していないタイミングで値が書き換わったり、外部の要因で状態が変化してしまう(関数の副作用)。
デフォルトは不変としておくと、状態が固定され、予期せぬ状態変更が起きにくくなり見通しが良くなる。

引数にもfinalをつけたり、徹底的に状態を固定することを推奨していた。
変数増えて冗長に見えちゃいそうだけど、結果的には分かりやすいのだろうか。