Kruhova zavislost – ako sa jej vyhnut
- marioff
- Člen | 69
Chcem sa opitat:
mam Validator zaregistrovany ako sluzbu, ktory ma v konstruktore:
$this->userDao = $entityManager->getDao('Model\Entity\User');
a pouzivam ho na validaciu formularov a tento isty Validator chcem pouzivat aj v repozitari tej entity User.
Lenze tu nastava kruhova zavislost, ked si ho do repozitara vlozim cez zavislost.
Je spravne to vyriesit nejak takto: ?
Do Validatora cez konstruktor ulozim do premennej len EntityManager a az v samotnej metode Validatora zavolam nieco taketo:
return $this->em->getDao('Model\Entity\User')->countBy($criteria) ? FALSE : TRUE;
porusim tym nieco , ci je to OK? Hadam som to vysvetlil dobre, ak nie opitajte sa co nie je jasne… dakujem moc
- Filip Procházka
- Moderator | 4668
Validátory do repozitářů nepatří. Repozitáře nemají ukládat data, ale pouze je načítat. Ukládat data máš přes EntityManager a validace bys měl mít ideálně jako preUpdate a prePersist listenery.
Vytahovat dao/repository, až v metodě kde ho potřebuješ, není nic proti ničemu.
- marioff
- Člen | 69
data sa ukladaju cez entity manager, len rovno v repozitari .. validacia je zlozitejsia, nevaliduju sa data len pri zapise, ale potrebujem validovat aj uz ulozene entity (platnost tokenov, akcii, notifikacii atd…) a zda sa mi logickejsie ked toto vsetko prevezme repozitar ako to pchat do dalsej vrstvy – ale este teda pouvazujem nad tymi listenermi
dakujem
Editoval marioff (12. 1. 2015 23:35)
- Filip Procházka
- Moderator | 4668
Ano, doporučil bych ti to pchát do service/facade vrstvy. To že to děláš v repozitáři (byť přes EM) pořád z venku vypadá jako by to dělal repozitář ⇒ špatně.
Listenery jsou rozhodně lepší řešení. Pokud validuješ načítaná data, tak často bude ještě lepší řešení právě ty service/facade.
Repozitáře mají data jenom načítat, mícháš si odpovědnosti.