V MVC mají být transakce na jaké úrovni? rubrika: Návrh

2 Leinad
položil/-a 28.7.2015

Pokud pracuji s databází, kde má být START TRANSACTION a COMMIT v MVC architektuře? Osobně si myslím, že na úrovni controlleru, protože některé metody modelu chci používat samostatně, některé chci spojovat jak v controlleru, tak v jiných modelech.
Když se ale kouknu třeba na Grails, tak ty automaticky dávají, že všechny metody modelu (Service) jsou transakční.

Na které úrovni děláte transakce vy a proč?

odkaz
3 briza.tomas
odpověděl/-a 28.7.2015

Jedina vrstva ktera by mela resit transakce je Servisni (services) ani kontroler ani repository. Kontroler je jednoducha komponenta ktera pouze vola servisni metody nic jineho (jeste formalni validace). Repositry je take jednoducha komponenta ktera resi poskytovani/ukladani data nic jineho. Service vrstva by mela znat pouze jako jedina bussines logiku kterou je potreba vykonat pro dany use case, repository prebiraji transakci od servisni tridy. Zalozeni, rollback, commit si resi servisni vrstva.

Komentáře

  • Jakub Macek : Doplním, že ten trik je nespojovat nic v controlleru - ten by měl přežvýkat vstupní data (mimo transakci), přehodit vše do business logiky (jeden model, uvnitř transakce) a nakonec z výsledku vybrat co se má zobrazit a poslat to do view. V souvislosti s tímto ještě doporučuji kouknout na CQRS (třeba http://martinfowler.com/bliki/CQRS.html). 28.7.2015
  • Jakub Macek : A teď jsem si ještě uvědomil jednu věc - v některých implementacích se zpracování vstupu řeší tak trochu IoC přístupem, takže do "controlleru" už přijde všechno zpracované. V takových případěch je možné, že se to pouze controller jmenuje, ale ve skutečnosti to ani spíš není. Často je to u různých API. 28.7.2015
  • Kit : Controller přece vůbec neřeší, co se má zobrazit. Prostě pošle HTTP 302 na View. 8.8.2015
  • Taco : Tak to určitě. 9.8.2015

Pro zobrazení všech 11 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.