Bonjour à tous, et bonnes fêtes de fin d'année au passage !

Je suis en train de migrer mon code depuis un Repository Pattern personnel vers Doctrine 2. Ça fonctionne plutôt bien, il y a juste quelque chose qui me chagrine.

Mes différentes classes de services ont besoin de différents repositories, qu'elles demandent dans leur constructeur. Jusqu'à présent, un petit injecteur automatique de dépendances leur fournissait ce dont elles avaient besoin, mes repositories n'étant que des classes habituelles.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
<?php
class Service
{
	public function __construct(repository\User $repositoryUser, repository\Car $repositoryCar)
	{
		// ...
	}
}
?>

Avec Doctrine, les choses changent, puisque les repositories ne peuvent plus être instancié directement mais doivent être obtenues depuis l'Entity Manager :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<?php $entityManager->getRepository('...'); ?>
Comment puis-je gérer cette situation ?

J'ai bien deux solutions en tête, mais aucune ne me convient.

  • Les services pourraient ne demander plus que l'instance de l'Entity Manager… Ce serait une violation pure et simple de la loi de Déméter.
  • Je pourrais modifier mon injecteur de dépendances pour qu'au lieu d'instancier les repositories, il les récupère depuis l'Entity Manager… En plus de devoir traiter un « cas particulier », ce qui n'est jamais bon signe, ce serait me coupler très fortement à Doctrine.



Je débute avec Doctrine, alors est-ce que je suis passé à côté de quelque chose ? Quel est votre avis sur la question ?
Merci d'avance pour vos suggestions !