Principe de ségrégation des interfaces
Pollution d'interface par aggrégation de services
On retrouve dans la plupart des designs quelques classes qui rendent plusieurs services simultanément, comme l'illustre le schéma ci-dessous :
L'inconvénient de ce genre de cas est que tous les clients ont une visibilité sur tous les services rendus par la classe :
- Chaque client voit une interface trop riche dont une partie ne l'intéresse pas,
- Chaque client peut être impacté par des changements d'une interface qu'il n'utilise pas.
Solution : séparation des services de l'interface
Le principe de séparation des interfaces stipule que chaque client ne doit "voir" que les services qu'il utilise réellement :
Techniques de séparation
Il existe deux techniques principales de mise en pratique de l'ISP :
-
L'héritage multiple,
- Le Design Pattern "Adapter".
Séparation par héritage multiple
Dans cette approche chaque service est représenté par une classe d'interface dont dérive la classe qui implémente les services. Les clients ne voient les services qu'au travers de ces classes d'interface comme le montre le schéma suivant :
Séparation par Adapter
Lorsque l'héritage multiple n'est pas possible, les services peuvent être représentés par des classes d'adaptation :
_____
Article original : http://www.objectmentor.com/publications/isp.pdf
Voir également InterfaceSegregationPrinciple
sur Wiki.