インタフェース分離の原則(ISP)
インタフェース分離の原則とは
- クライアントに、クライアントが利用しないメソッドへの依存を強制してはならない。
利用しないメソッドに依存してしまうと、クライアントはそういったメソッドの変更の影響を受けやすくなってしまう。=無駄にテストする必要が出てくる。
分離方法
- 委譲を使って分離する方法
- インタフェースを多重継承して分離する方法
- 線形継承は不必要に依存してしまうため、アンチパターン。
基本は委譲を使って分離したほうが良いかな。
単一形式(Monad)よりも複数形式(Polyad)
複数形式の場合、同じインスタンスを複数回渡す事があるかもしれないが、
それでも、不必要なインタフェースを渡してしまう可能性がある単一形式よりも範囲を制限できる複数形式の方が良い。
InterfaceSoup アンチパターン
- インタフェースを集約(複数継承)して、インターフェイスを作成しても、なんの意味もないのでやめる
結論
単一責務の原則に似ているが、インタフェースを太くしないということが重要。
クライアントごとに特化したインタフェースを用意する。
委譲を使用する場合と複数継承使用する場合の判断がまだ曖昧だが、
基本は委譲を使用して、親子関係にすべきと判断したものを多重継承にしたら良いと思う。