9.2 高品質なコードは疎結合である
内容
疎結合とは、部品と部品の結合部につなぎ目を入れて、お互いが直接干渉しない状態のこと。
その逆は密結合。
これによってそれぞれを変更したときにお互いが影響しないため変更しやすくなる。テストするときはモックを使ってテストができる。
JavaやC#ではインターフェースを使って実現できる。
ただし、なんでもかんでも疎結合にすればよいというわけではない。
例えば、GUIに終了ボタンとボタン押下時の終了アクションがあり、要件的にその2つは必ずセットになっていないとおかしい場合、必ずしも疎結合でなければならないとは思えない。
つまり、疎結合であってほしいところと疎結合で、密結合であってほしいところは密結合であってほしい。
これを「意図による結合と不慮の結合」という言い方を著者はしている。
疎結合が良くて密結合が悪いのではなく、それぞれあるべき結合度をコントロールできているかが重要。
特に、多くのことを行うAPIが不慮の結合になってしまうケースが見受けられる。
こういう場合は内部で複数のAPIを呼び出すように実装することで、複雑性をそれぞれのAPIに任せることができ、結果的に疎結合にもなり凝集性も高くなる。
また、性能や別の制約によってコード品質を下げてしまう場合があまりにも多いが、これは本当にしょうがない場合だけにするべき。
学び
- 結合度と凝集性は少し似ている。
学びを活かすアイディア・行動
- GUIとプレゼンテーションロジックの結合度を考える