Mapování entit v entitě/repozitáři nebo mapperu?

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

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?