Bonjour à tous,
Je suis en plein en POO et je souhaite savoir ce qu'est une dépendance et comment l'injecter. Vraiment avec un exemple basique...
Merci d'avance...
Bonjour à tous,
Je suis en plein en POO et je souhaite savoir ce qu'est une dépendance et comment l'injecter. Vraiment avec un exemple basique...
Merci d'avance...
Une dépendance c'est quand une classe à besoin d'une autre pour fonctionner.
par exemple une classe Personne contient une Adresse :
Dans ce cas tu vois que la classe Personne est très fortement lié à sa dépendance Adresse. Si adresse vient à changer on doit aussi modifier Personne. Idéalement la dépendance doit êtr ela plus faible possible c'est pour ça qu'on utilise l'injection de dépendance :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 class Adresse { private $ville; private $rue; public function __construc($ville, $rue) { $this->ville = $ville; $this->rue = $rue; } } class Personne { private $adresse; private $nom; public function _construct($nom,$ville,$rue) { $this->adresse = new Adresse($ville,$rue); } }
Personne devient alors :
Personne n'est plus responsable de l'instanciation de sa dépendance et n'est donc plus obliger de savoir comment elle fonctionne.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class Personne { private $adresse; private $nom; public function _construct($nom,Adresse $adresse) { $this->adresse = $adresse; } }
A ce niveau c'est ok pour le sujet.
Maintenant en quoi consiste le principe des factory en DI ? Avec le code en exemple qu'est ça devient ?
Merci d'avance...
Dans le cas présent tu te rend compte que pour chaque instance de Personne tu dois te cogner l'instanciation d'une Adresse.
Pour automatiser un peu tout ça on passe par un design pattern qui est la factory qui donnerait quelque chose comme
Comme t'as suivi un peu tu vas me dire qu'on se retrouve dans le même cas qu'au tout début. Ce à quoi je répond oui mais ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class PersonneFactory { public function create($nom,$ville,$rue) { $addr = new Adresse($ville,$rue); return new Personne($nom,$addr); } }
Tes classes métiers reste découplées et utilisables indépendamment.
De plus tu vas pouvoir mettre dans la factory du code lié à l'instanciation de tes objets qui n'aurais pas vraiment raison d'exister dans tes classes métiers.
Perso j'utilise pas trop les factory dans l'injection de dépendance , mais ça à son utilité.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager