達人プログラマー 第2章

二重化の過ち

DRY(Don't Repeat Yourself)原則(繰り返しを避けること)

「すべての知識はシステム内において、単一、かつ明確な、そして信頼できる表現になっていなければならない。」

  • DRY原則に従うことにより、信頼性の高いソフトウェアを開発して、開発そのものを簡単に理解したりメンテナンスできるようになる。
DRY原則を破る

⇒同じ知識を2か所以上に記述すること。

二重化の発生原因
  • やむをえない二重化
  • 不慮の二重化
  • 手抜きによる二重化
  • 開発者間の二重化

直行性

直行性とは、簡単に設計、製造、テスト、拡張できるシステムを構築する場合に必要となる重要な概念。グラフの座標軸をイメージ。
ある種の独立性、分離性を表す。2つ以上のものごとで、片方を変更しても他方に影響を与えない場合、直行しているといえる。

直行していないシステムの例

ヘリコプター
⇒操作が複雑

直行することの利点

生産性の向上

  • 変更が局所化されるため、開発期間とテスト期間を短縮させることができる
  • 直行性を考慮したアプローチによって再利用も促進される。システム間の結合が疎であればあるほど、再編成や再作成が簡単。
  • 直行しているコンポーネントを組み合わせることによって、生産性の向上が見込める。M × N 種類

リスクの削減

  • コードの問題発生部分を隔離できる。
  • 検証しやすい
  • 特定ベンダー、製品、プラットフォームと強く無図日ついてしまうようなことが無くなる

コーディング
コーディングを行うたびに、意図せずほかのモジュールの中にある昨日を重複させたり既存の知識を重複表現してしまうかもしれない。

直行性を維持するためには?

  • コードの結合度を最小化する。オブジェクトの状態を変更する必要があるのであれば、それをオブジェクト自身にさせる。
  • グローバル・データを避ける
  • 類似機能のリファクタリング
直行性との付き合い方

DRY原則ではシステムないの二重化を最小限に抑える事を目的としているが、
直行性ではシステムのコンポーネント間の依存関係を最小現に抑えることを目的としている。

メモ

オブジェクトのアトリビュートを読み書きする際は、可能な限りアクセッサー・メソッドを使用する