Kruhova zavislost – ako sa jej vyhnut

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
marioff
Člen | 69
+
0
-

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
+
+1
-

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
+
0
-

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
+
+1
-

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.

marioff
Člen | 69
+
+1
-

oki, dam na teba, vymyslim kde by som to supol.. do fasady ale asi nie, tu chcem aby sluzila len ako obalka nad vsetkymi ostatnymi vrstvami modelu

dakujem ti, cenim si tvoje rady aj tvoju pracu.