Bonjour
Afin d'illustrer mon probleme je vais prendre un exemple tres simple :
J'ai un mini projet de Todolist MVC avec 2 entités: Directeur et Employé.
Le langage n'a pas d'importance, par contre je ne peux pas utiliser de couche ORM.
le Directeur crée les todos et les assigne aux employés qui eux doivent les traiter
Il y a ainsi 2 pages
1. une page avec les états de toutes les todolists (backend Directeur)
2. une page filtrée avec juste les todos de l'employé connecté (frontend)
Ca va paraitre bête, mais j'ai une hésitation coté Model :
1. soit je fais une composition d'objets
entre l'entité et un Repository unique nommé TodosRepository qui contient findAll(), findBy*()
l'entité contient un getter tel que :
Les rôles sont bien séparés : L'entité expose des actions métier, mais en interne elle appelle le Repo qui lui s'occupe du requetage BDD.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public function todos(){ if ($this->_todos == null) $this->_todos = new TodosRepository($this); return $this->_todos; }
La fonction TodosRepository::findAll() peut etre appelée aussi bien par Directeur que par Employe. En soi ca parait intéressant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 j'utilise alors soit $entite->todos()->findAll(); soit un wrapper $entite->findAllTodos();
Mais le requetage dépend du type de l'entité : dans le cas où c'est le Directeur qui invoque la fonction, aucun filtrage ne doit s'appliquer. Dans le cas de l'Employer, le filtrage doit s'appliquer.
Pour savoir si le filtre doit s'appliquer ou non je me base sur le type réel de l'objet. Donc la au niveau modélidation objet ya un probleme.
Ou alors findAll() doit attendre un parametre $idEntite;
si $idEntite == null alors pas de filtrage.
2. soit je crée des Repository dédiés
"DirecteurTodos", "EmployeTodos" et chacun sait ce qu'il a a faire, mais c'est dommage de se passer de la composition d'objets
3. soit j'implémente findAll() dans l'Entite.
Du coup le Repositiory n'a plus lieu d'etre mais ya mélange Métier+Persistance
J'ai du mal a voir ce qui est le mieux a faire.
help ! merci d'avance
Partager