Open2

【本】良いコード/悪いコードで学ぶ設計入門

GIBAGIBA

10.5 グローバル変数の利用ができるだけ避ける

  • グローバル変数を参照し,値を変更すると,どのタイミングで値が書き換わったのか把握が困難になる。カプセル化されたロジックに比べてかなり注意が必要になる。
  • 使い方によっては排他制御が必要な場合が生じる。はいた制御の設計を誤るとデッドロックに陥る可能性もある。
  • カプセル化してアクセス可能なパッケージやクラスを限定することが大事。

10.9 技術駆動パッケージングは避ける

  • 技術的な特徴が似ているものどうしでフォルダ分け,パッケージ分けすることを技術駆動パッケージングと呼ぶ。
  • フレームワークの標準構造が技術駆動パッケージングであるため,内部のフォルダ構造も技術駆動パッケージングになりがち。
  • 業務上の概念を表すクラスを業務クラスと呼ぶが,この業務クラスを技術駆動パッケージングでフォルダ分けすると本来強く関係し合うファイル同士がバラバラになり混乱する。
  • 概念として強く関係し合うもの同士を一緒にするようにフォルダ分けする

10.11 設計に銀の弾丸はないため課題と目的を意識して技術選択する

  • 最新の便利そうに見える手法を使うと逆に問題を深刻化してしまうケースすらある。
  • 「GoFのデザインパターン」を無理に使おうとしてかえって変更が難しくなっているコードも存在する。
  • 本書に記載の手法を手当たり次第に適用するのは誤り。重要なことは,どんな課題があるか,ある手法がその課題解決に効果的か,コスト的に問題にならないかを評価して判断する姿勢。
  • 設計にbestはないため,常にbetterを目指すことが大事。
GIBAGIBA

5.1 プリミティブ型(プログラミング言語が標準で用意している基本データ型)を引数や戻り値に濫用するのはやめる

  • プリミティブ型で動くコードを書くことはできるが,強く関係し合うデータとロジックをうまくカプセル化できない。このため,バグを埋め込みやすくなり可読性が低下する。
  • 一つ一つの変数を丁寧にカプセル化し,バリデーションもカプセル化することでバグが減り,可読性が向上する。