はじめに
たくさんの原則を覚えるのは大変だけど、これは常に意識して欲しい!
と先輩から助言をいただきました。メモになります。
凝集度と結合度とは
- ソフトウェアの品質を示す指標(メトリクス)
高凝集/低結合にするメリット
- 理解容易性:コードを読んで理解しやすくなる
- 拡張性:コードを修正、拡張しやすくなる
- 信頼性:修正時にバグを埋めにくくなる
- 再利用性:同じコードを別の場所で再利用しやすくなる
- テスト容易性:テストが実施しやすくなる
凝集度とは
- モジュール内の要素同士がどれだけ関連しているかを示す指標
- クラスの責務、そのクラスのメソッドとデータ関連(属性)の強さ
- 高い方が良い
保守を考えたとき、ひとつの関数の中で、様々な機能が混ざり合うことは好ましくない。機能分割されて、機能と関数が1対1になっている方が理解しやすく、修正の際に他の部分に悪い影響を与える機会が減る。
結合度とは
- モジュール同士の依存度の高さを示す指標
- 依存度が高い→依存先の修正の影響を受けやすくなる
- 低い方が良い
呼び出し関係にあるメソッドの結び付きの強さを表す指標。結合度が高くなると複数のクラスで依存度が上がってしまうため、保守やメンテナンス、仕様変更などの対応がしづらくなる。また、設計的な観点からしても、複雑で分かりづらくなってしまう。