![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Nieautoryzowani Postów: 1 Pomógł: 0 Dołączył: 2.02.2015 Ostrzeżenie: (0%) ![]() ![]() |
W uproszczeniu, zgodnie ze wzorcem MVC, w aplikacji można wydzielić Router, który odpala jakiś kontroler, który przy użyciu modelu, generuje widok. W (pseudo)kodzie można wyrazić to tak:
Ale co powinno być w if'ie? To co wydaje się najrozsądniejsze z mojego punktu widzenia i dobrze wpisuje się w OOP, to coś takiego:
Dzięki temu możemy wiele różnych Guard'ów dla np. każdego kontrolera lub grupy kontrolerów. Ale w takim razie jak taki guard ma się znaleźć w funkcji renderującej? Przekazanie go przez argument funkcji jest moim zdaniem bez sensu, bo co jeśli będę potrzebował kolejnego obiektu np. LoginManager, który posiada funkcję redirect_to_login_page? Też przez argument? Potem będę przekazywał 10 różnych obiektów do każdego widoku, a korzystał w danym widoku z jednego lub dwóch. Nie wspomnę już o obiekcie User, który najlepiej gdyby był tworzony raz na początku skryptu np. w funkcji route. Czy zatem mam go przekazać do funkcji Controler:run, a z niej do View::render ? Więc może inaczej:
Wygląda to bardzo czytelnie. Obiekt CurrentUser może być częściowo inicjowany w Router'ze:
A częściowo w Controler'ze:
Funkcja CurrentUser::hasAccess mogłaby wyglądać tak:
Jest tylko jedno ale. Taki twór działa globalnie, co moim zdaniem nie jest zbyt dobre. W końcu dążymy do hermetyzacji. Odplamy dwa routery równolegle (trochę abstrakcja ![]() Mam nadzieję, że dosyć dobrze nakreśliłem problem. Przedsawiłem dwa rozwiązania, które jako tako mogłyby być, ale szukam czegoś lepszego. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 17:42 |