2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

インタフェース分離の原則(ISP: The Interface Segregation Principle)

Posted at

インタフェース分離の原則

  • クライアントに、クライアントが利用しないメソッドへの依存を強制してはならない
  • 利用しないメソッドに依存してしまうとクライアントはそういったメソッドへの変更の影響を受けやすくなる
  • メソッドを利用しないのであれば、クライアントは本来その変更に無関係なはずだが、それに依存していると不用意に影響を受けてしまう
  • 利用していないメソッドに依存していると、他のクライアントがクラスに強いる変更によって、そのクラスに依存している自分まで巻き込まれてしまう
  • 不本意な結び付きをできるだけ避けるために、インタフェースを分離する

インタフェースを分離する

  • それぞれのクライアントが実際に利用するメソッドだけに依存する
  • 関連性のあるインタフェースはグループ化
  • 利用しないメソッドとの依存を断つ
  • インタフェースにあれもこれも詰め込みすぎない

結論

  • 「太った」クラスは、それを利用するクライアント同士が有害な関連性を持つ原因となる
  • あるクライアントが「太った」クラスに変更を強いると、他の全てのクライアントに影響が及んでしまう
  • 有害な関連性を断ち切るには、各クライアントは実際に自分が利用するメソッドだけに依存する
  • 「太った」クラスのインタフェースを各クライアントのニーズに合うようにインタフェースを細かくグループ化すれば可能
  • クライアント毎に特化したインタフェースには、それを利用するクライアントやクライアントグループだけが利用するメソッドだけを宣言
  • 後で「太った」クラスを構築したければ、クライアント毎に特化したインタフェースを全て継承し、必要なインタフェースを実装
  • このような方針をとることで、クライアントは自分が利用しないメソッドとの依存関係を断ち切り、クライアント同士の同士の独立性を保てる
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?