Inversion de dépendances (1)
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
B
etA
- build
B
etA
- pour finalement déployer
B
etA
chez 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.
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
A
ne dépend plus deB
mais de son interfaceIB
- Donc si
B
est modifiée alors seulementB
sera packagée, build et déployée chez le client
Cependant, si nous modifions l’interface IB
alors les classes B
et A
devront être packagées, build et déployées chez le client. Néanmoins une interface est moins volatile qu’une implémentation.