Předávání instance Entity přes Container

- VojtaSim
 - Člen | 55
 
Zdravím,
nedávno jsem začal používat Lean Mapper a s výhodami,
které poskytující entity mi začalo vrtat hlavou jak by se dala předávat
daná Entita do modelů atd.
Entitu vytvářím v BasePresenteru::startup() a obsahuje data
potřebné jak v presenterech dědicích od BasePresenteru tak
i v některých modelech/Repositářích. Potřebná data =
např. id zmiňované entity podle kterého vybírám další
seznamy v repositářích.
$neededEntity = $this->someRepository->get($id);
$this->context->addService('neededEntity', $neededEntity);
Teď otázka:
Je dobré v presenterech, ve kterých injectuju model/Repositář (který
potřebuje tu entitu) zavolat vlastní metodu, která mi předá potřebnou
entitu (ať už z ->context->getService('neededEntity') nebo
z BasePresenter->needeEntity)?
Nebo je lepší mít tu entitu uloženou jen v
BasePresenteru->neededEntity a při každém volání metody
z modelu/Repositáře předávat požadované data z entity +
další věci?

- Filip Procházka
 - Moderator | 4668
 
Udělej obálku která bude entitu poskytovat, rozhodně neregistruj entitu jako službu.

- Tharos
 - Člen | 1030
 
+1 @Filip
Dále, pokud používáš Lean Mapper, bych si dal záležet, aby se do
takové služby zabalila entita, která má co „nejčistší kontext“.
Jinými slovy taková, která byla vytažena z databáze jako jediná v rámci
daného dotazu. V praxi třeba pomocí
$repository->find($id).
Osobně bych nepoužil entitu, ke které jsem se nějakým způsobem
dotraverzoval, načetl ji v rámci nějakého
$repository->findAll() atp.

- VojtaSim
 - Člen | 55
 
Tharos napsal(a):
Jinými slovy taková, která byla vytažena z databáze jako jediná v rámci daného dotazu.
Entita je single vytvořená pomocí ->createEntity()
Filip Procházka napsal(a):
Udělej obálku která bude entitu poskytovat, rozhodně neregistruj entitu jako službu.
s obálkou není problém, spíš že s
->addService('neededEntity', $neededEntity); jdu jak
s křížkem po funuse, protože všechny ->injcect() už
proběhly a musel bych v každém presenteru manuálně předávat entitu do
každého modelu/repositáře, který ji vyžaduje.