Má service vrstva smysl?

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

Má v Doctrine 2 smysl cpát mezi presenter a repository (případně DAO) ještě service vrstvu? Zatím jsem přišel na tyto výhody a nevýhody:

Výhody

  • Použití na více místech
  • V presenteru je méně kódu

Nevýhody

  • Z presenteru nemám přístup k repository (např. find* funkce)
  • Chci se vyhnout psaní metod jako jsou „findByIdOrderByName“, protože k tomu mám magické metody v repository

Řešil zde už někdo podobný problém? Díky.

Editoval Nutelac (13. 11. 2012 18:54)

Jan Tvrdík
Nette guru | 2595
+
0
-

Má service vrstva smysl?

Ano.

Z presenteru nemám přístup k repository (např. find* funkce)

Tak to je snad tvoje volba.

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Jen krátký komentář: mám dojem, že zbytečně odděluješ Doctrine od služeb, jako by ona sama službou nebyla. Sám jsem si takovým obdobím prošel – mnohem lepší oddělování je však to původní, presentační logiky od aplikační logiky.

Doctrine je služba jako jakákoliv jiná. Můžeš ji používat přímo ve vrstvě presenterů, nebo si napíšeš vlastní další služby, které mohou Doctrine využívat jako závislost. Jediné vodítko je míra znovupoužitelnosti, přehlednosti, testovatelnosti…

Každopádně sestavovat v presenteru SQL dotazy (ať už pomocí jakéhokoliv API? od mysql_* funkcí po objektové rozhraní Doktríny) nemůžu doporučit :).

Nutelac
Člen | 58
+
0
-

Jan Tvrdík napsal(a):

Z presenteru nemám přístup k repository (např. find* funkce)

Tak to je snad tvoje volba.

Ve všech příkladech jsem totiž viděl, že repository byl přístupný pouze v service. Díky za ujasnění.

David Ďurika
Člen | 328
+
0
-

V praci sme riesili tiez 5 vrstvovy model, a mali sme taku myslienku ze v prezentery sa bude narabat len so Servisou (obalka nad entitou) a so ServiceListom (obalka nad Repository).

ALE! prax ukazala ze to je velmy zly prisut, teraz to mame take ze v prezentiry sa naraba normalne s Repository aj s Entitou aj s Servisou, zalezi od toho co programator potrebuje… ovela to zjednodusilo a zprehladnilo veci!

Jirda
Člen | 103
+
0
-

Dival bych se na to pragmaticky. Paklize k provedeni neceho staci pouze repository, neni duvod ji nevolat. Paklize je neco slozitejsi, vyuziva to treba vice repozitaru apod., postavil bych to za tu service.
ALe samozrejme, i tohle se neda nekdy tak snadno generalizovat.

arron
Člen | 464
+
0
-

Pokud tam ta service/facade vrstva nebude, tak pak obvykle nastává problém nejenom s testovatelností,le i v případě změny chování Doctrine. Ona ta vrstva do značné míry zajišťuje odstínění Doctrine od aplikace, takže když dojde ke změně chování Doctrine, tak se to dotkne právě jenom té service vrstvy a neníj potřeba přepisovat půlku aplikace. V tom vidím zásadní výhodu :-)

David Ďurika
Člen | 328
+
0
-

arron napsal(a):

niekde som cital ze „Každý presenter má vždy jednu svou fasádu, a neměl by šahat do fasád jiných presenterů“ tak aky ma ta fasada zmysile v smysle tom co pises? ved ked sa mi zmeni doctrine ako pises tak musim prerabat fasadu a ten kto nema fasadu musi prerabat prezenter… ziadny rozdiel…

Editoval achtan (14. 11. 2012 9:16)

mkoubik
Člen | 728
+
0
-

Fasáda žádnou logiku neobsahuje, jen deleguje volání metod na service vrstvu pod sebou. Takže té se úpravy týkat nebudou.