Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Object-oriented programming _ Kontrolery i serwisy aplikacji

Napisany przez: eerie 3.08.2020, 10:35:22

Siedzę już godzinę na forum i nie znalazłem odpowiedzi na nurtujące mnie pytanie...

Gdy zaczynałem programować obiektowo w PHP, umieszczałem całą logikę biznesową w kontrolerach. Zwrócono mi na tym forum uwagę, iż nie jest to poprawne. Że kontroler powinien tworzyć jedynie potrzebne obiekty i wstrzykiwać je do serwisu aplikacji. Cała logika biznesowa powinna być wykonywana w takim serwisie. Potem znalazłem ciekawy artykuł na ten temat i ma to sens:

http://adam.wroclaw.pl/2016/04/serwis-serwisowi-nierowny/

Oto prosty przykład, jak obecnie tworzę kontrolery:

https://github.com/webeeq/symfony.eeq/blob/master/src/Controller/EditSiteController.php

Oraz serwisy:

https://github.com/webeeq/symfony.eeq/blob/master/src/Service/EditSiteService.php

Jednak spotkałem się z opinia programisty ASP.NET, że takie przerzucanie wszystkiego z kontrolera do serwisu nie jest wcale takie poprawne. Inny programista PHP podał mi przykład aplikacji, która w ogóle nie korzysta z serwisów aplikacji. Więc jak to jest? Jak tworzyć aplikację webową w PHP, aby było poprawnie? Prosiłbym o jakiś link do repozytorium z przykładowym kodem. U mnie w serwisach aplikacji faktycznie jest lekki bałagan i nie wygląda to dobrze. Jak to powinienem wykonywać poprawnie? smile.gif

Napisany przez: netir 3.08.2020, 13:32:58

Nie znam zbyt dobrze Symfony, ale z tego co widzę to masz wszystko pomieszane - https://symfony.com/doc/current/service_container/autowiring.html

Powinieneś zrobić interfejs zaimplementować go pod Service i wstrzyknąć interfejs do Controllera. Sam service nie powinien robić żadnej walidacji, tylko spełniać jakieś jedno określone zadanie, tak żebyś mógł go wstrzykiwać w dowolne miejsca w myśl DRY.

Napisany przez: eerie 4.08.2020, 10:45:56

Dzięki za odpowiedź. Poczytałem trochę i doszedłem do pewnych wniosków. W artykule, który podałem, autor napisał, iż serwisy możemy podzielić na trzy rodzaje (Serwisy Aplikacji, Serwisy Infrastruktury, Serwisy Domeny). Symfony pozwala unikać powtarzania się kudu (dzięki autowiring) i wstrzykiwać serwisy np. do metod akcji kontrolerów. Nie oznacza to jednak, iż musimy z tego korzystać, ale możemy...

Z artykułu wynika, iż stosowanie Serwisów Aplikacji, aby przenieść logikę biznesową z kontrolera do takiego głównego serwisu zarządzającego innymi serwisami, jest jak najbardziej ok. Tylko nie wiem, czy to jest powszechna i zalecana praktyka. Bo ja po prostu przeniosłem całą obsługę formularza i wszystkie związane z tym akcje do mojego serwisu. W kontrolerze pozostało samo sprawdzenie uprawnień do modyfikacji danych strony i przekierowanie na stronę logowania, gdy ich brak. Tylko mam wątpliwości, czy ma to sens? Bo kontroler praktycznie nic nie wykonuje...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)