Le problème
Supposons l’architecture suivante où la classe A dépend de la classe B.

Dans cette conception, si B est amenée à changer (e.g. montée en version), alors la classe B et la classe A vont devoir être rédéployées.
On va devoir :
- packager
BetA - build
BetA - pour finalement déployer
BetAchez le client

Or, seulement B a été modifiée. Nous souhaitons donc que seulement B soit packagée, build et déployée chez le client.
Inversion de dépendance
Pour ce faire, nous allons utiliser le principe d’Inversion de dépendances.
Note
- Les modules de haut niveau (e.g.
A) ne doivent pas dépendre des modules de bas niveau (e.g.B).- Les abstractions ne doivent pas dépendre des détails. Les détails doivent dépendre des abstractions.
En d’autre terme, A qui est un détail doit dépendre d’une interface I.
Si nous appliquons ces deux affirmations à notre architecture nous obtenons

Ane dépend plus deBmais de son interfaceIB- Donc si
Best modifiée alors seulementBsera packagée, build et déployée chez le client
Note
Cependant, si nous modifions l’interface
IBalors les classesBetAdevront être packagées, build et déployées chez le client. Néanmoins une interface est moins volatile qu’une implémentation.