SOLID - Dependency Injection

SOLID – Dependency Injection

L’injection de dépendance, le 5ème et dernier du principe SOLID. Comme certains des principes que j’ai déjà pu présenter, il fait partie de la programmation orientée objet mais j’irai plus loin car, à mon sens, c’est une façon de concevoir qui va bien au delà de l’objet lui même. Maintenant, qu’en est-il ?

L’injection de dépendance est une application du design pattern de l’inversion de contrôle. Comme j’ai pour habitude de tenter de vulgariser ces concepts, l’idée est de : Donner à un objet (une fonction, une méthode) ce dont elle a besoin pour travailler. Pour comprendre tout cela, nous allons faire une analogie avec une machine à café !

PHP

Nous ne changeons pas nos habitudes, le drame est déjà présent. Depuis quand votre machine à café est capable, toute seule, de générer des capsules ? Ce serait merveilleux je vous l’accorde, plus besoin d’aller en acheter… Mais la réalité est tout autre, votre machine à café a besoin d’une capsule pour travailler, alors donnez lui.

Pourquoi ? Point pub ! Dans votre machine Nespresso, vous mettez tout le temps des capsules Nespresso ? Pas forcément, il existe d’autres capsules capable d’être accepté par la machine et c’est là que réside toute la magie du concept. Comment ? Voyons voir tout cela de plus prés.

PHP

Nous voilà avec un objet bien plus respectueux du principe d’injection de dépendance. Nous lui donnons les 2 informations dont nous avons besoin : une capsule, et pourquoi pas, une date de création. Si vous observez bien, j’utilise une interface sur le paramètre capsule. Cela m’oblige donc à passer un objet qui respecte cette interface. C’est exactement ce qui se passe avec nos machines Nespresso. Pour que les différents constructeurs puissent faire fonctionner d’autres capsules, ils implémentent l’interface d’une capsule c’est à dire, les différents paramètres qui permettent à une capsule d’être accepté et utilisé par une machine Nespresso.

PHP

Vous voyez l’idée ? Allons plus loin… Nous sommes d’accord que nous n’allons pas instancier une machine a café à chaque fois que nous avons besoin d’en faire ? J’entends par là que le mot instancier voudrait dire qu’on aille acheter une nouvelle machine à chaque fois que nous avons besoin de faire du café. Ca ne me semble pas utile… Alors comment fait-on ?

L’injection de dépendance peut fonctionner via un constructeur mais pas que. Vous pouvez tout à fait injecter à votre objet son besoin via des “setters” : tant que vous lui donnez ce dont il a besoin pour travailler. Dans le cadre d’une machine à café, cela fait d’autant plus sens que vous devez lui donner la capsule dès lors que vous souhaitez vous faire couler un café.

PHP

Nous y voilà ! La fin d’une série d’articles sur le principe solid. A partir de maintenant, vous ne devriez plus avoir aucune raison pour faire de la OOP avec les pieds mais plutôt avec des doigts de développeurs 🙂 Mais la programmation orientée objet ne se résout pas en 5 principes et il y a encore bien d’autres choses que nous verrons certainement plus tard!