Laravel 5 - pytanie o dobre praktyki MVC

0

Dzień dobry!
Mam pytanko. Piszę sobie w Laravelu 5 pewną stronkę (serwis) internetowy. Mam pewne niejasności, gdzie powinienem umieszczać kod do obsługi danych z bazy. Prosiłbym więc Was, starych wyjadaczy, o kilka dobrych rad :)

Odczyt danych:
Gdzieś kiedyś usłyszałem o czymś takim jak "Repository Pattern", gdzie wszystkie findy (pobieranie danych) są robione w repozytoriach, które są potem wstrzykiwane za pomocą DI do kontrolerów. Tak też zacząłem robić, i jest to całkiem wygodne. Dzięki temu mogę stosować zasadę "skinny controllers", gdzie w akcji w kontrolerze są tak naprawdę tylko dwie linijki - jedna z wywołaniem funkcji z repozytorium, a druga ze zwróceniem widoku i podpięciem pod niego danych. Czy takie podejście jest poprawne?

Modyfikacja danych:
Jeśli się nie mylę, repozytoria to obiekty tylko do odczytu danych, nie powinny babrać się w żadną ich modyfikację? Struktura mojej aplikacji wygląda tak, że do każdej tabeli w bazie mam stworzony Model Eloquent (ten 'domyślny' z Laravela). W którym miejscu w kodzie powinien znajdować się zapis danych do bazy? Tzn. gdzie powinienem powoływać nowy obiekt modelu, ustawiać jego pola i wywoływać save()? Najprościej byłoby to robić w kontrolerze, ale taka koncepcja chyba odpada, bo kod byłby nie re-używalny. No i po drugie kontrolery muszą być "skinny". Jest jakiś wzorzec lub podejście, które rozwiązuje mój problem? Gdzie dodatkowo powinienem robić wszelkie obliczenia na danych przed ich zapisem?

Prosiłbym o pomoc, wskazanie jakichś pojęć z którymi powinienem się zaznajomić, podanie linków do artykułów.
Dziękuję :)

0

Uczyłeś się z tego?
http://laravel-docs.pl/

0

@wielki Młot - nie. Korzystałem tylko z dokumentacji laravela: https://laravel.com/docs/5.4

0

Repozytoriów nie powinno wstrzykiwać się do kontrolerów lecz używać w warstwie logiki biznesowej, która to dopiero jest używana przez kontrolery (a i to niekoniecznie bezpośrednio). Repozytoria jak najbardziej mogą mieć metody do modyfikacji danych. Z założenia repozytorium ma się zachowywać jak kolekcja danych.
(Tak w ogóle, to obstawiam, że obecnie wcale nie masz repozytoriów tylko zwykłe DAO tak nazwane.)

Miejscem obliczeń, tworzenia obiektów domenowych, i realizacji innej logiki biznesowej powinna być warstwa logiki biznesowej, której u Ciebie najwyraźniej brakuje.

Alternatywnie możesz zaimplementować CQRS - wtedy masz oddzielne obiekty odczytujące dane (query) i oddzielne modyfikujące (command). Masz wtedy mniej warstw i nie potrzebujesz repozytoriów.

Do poczytania:
http://commitandrun.pl/2016/05/11/Repozytorium_najbardziej_niepotrzebny_wzorzec_projektowy/
http://commitandrun.pl/2016/05/30/Brutalne_prawdy_o_MVC/

1 użytkowników online, w tym zalogowanych: 0, gości: 1