Mapování entit v entitě/repozitáři nebo mapperu?
- hAssassin
- Člen | 293
Ahoj,
vím, že to možná není dotaz přímo na Nette, ale v poslední době se
Nette stalo synonymem čistého návrhu, proto bych se rád zeptal zde. O co
jde. Snažím se vymyslet model a snažím se jít cestou 5ti vrstev. Takže
mám nějaké services, repositories, mappery a entity. Vrstva pro DB
je Dibi.
O co jde. Aktuálně mám načítání dat z DB tak, že v mapperu načtu data do pole (resp. do ActiveRow) a vrátím repozitáři, který z nich vytvoří entitu, čili předá jí závislosti + nastaví ID + zavolá všechny settery pro nastavení properties. A opačný postup je stejný, tedy pokud se entita ukládá, v repozitáři si do pole vytáhnu všechny hodnoty z properties entity a celé pole pak předám mapperu, čili mapper je na entitě zcela nezávislý a „mapuje“ pouze pole na DB.
Přemýšlel jsem nad tím a nevím jestli je to úplně košér, a jestli by přímo mapper neměl entitu vytvářet a stejně tak ji při ukládání dostat a data si z ní vytáhnout podle potřeby. Tím by se trochu odlehčil repozitář.
Další možností je nechat entitu vytvořit přímo z pole, např. metody
fromArray()
a toArray()
, ale to zase poruší
SRP nad entitou, protože entita už nebude mít jen základní
API pro práci s daty, ikdyž je to trochu sporný.
A nebo je současné řešení v repozitáři optimální? Jde mi hlavně co když bude víc mapperů, tak jestli je lepší všem mapperům před jednotný pole nebo celou entitu, ať si s ní každý udělá co chce po svém?