Wzorzec projektowy “Polityka” (ang. Policy Pattern) jest jednym z kluczowych narzędzi stosowanych w architekturze oprogramowania, szczególnie w systemach, gdzie zachowanie obiektów wymaga elastycznego i dynamicznego dostosowywania się do zmieniających się reguł biznesowych lub zasad aplikacji. Często wykorzystuje się go w kontekście uprawnień i kontroli dostępu, ale zakres jego zastosowania jest znacznie szerszy.
Czym jest wzorzec Polityka?
Wzorzec Polityka jest oparty na zasadzie strategii, gdzie decyzja o wykonaniu określonego działania zależy od obiektu zawierającego logikę lub reguły dostępu.
Polityki mogą być łatwo konfigurowane, rozszerzane lub zastępowane bez potrzeby modyfikacji głównego obiektu, co sprzyja elastyczności i testowalności kodu.
W skrócie: wzorzec Polityka polega na oddzieleniu logiki decyzyjnej od głównego kodu biznesowego, przekazując ją do wyspecjalizowanych klas polityki. Dzięki temu możemy dodawać lub modyfikować reguły bez ingerowania w strukturę klas głównych.
Kiedy używać wzorca Polityka?
Wzorzec Polityka jest idealnym rozwiązaniem, gdy:
- Logika decyzji zmienia się dynamicznie lub jest zależna od złożonych reguł.
- Istnieje potrzeba dodania nowych reguł bez wpływania na istniejący kod.
- Złożoność warunków wymaga oddzielenia logiki od podstawowej klasy.
Korzyści płynące z użycia wzorca Polityka
- Łatwiejsze testowanie – polityki są modularne i mogą być testowane niezależnie od klas, które je implementują.
- Wysoka elastyczność – nową logikę można dodać poprzez wprowadzenie nowych polityk bez potrzeby zmiany głównego kodu.
- Czystszy kod – decyzje są wydzielone, dzięki czemu klasy biznesowe są bardziej zwięzłe i łatwe w utrzymaniu.
Przykład użycia wzorca Polityka w PHP
Rozważmy prosty scenariusz, w którym mamy aplikację z różnymi poziomami dostępu użytkowników. Zamiast definiować dostęp w głównym kodzie, wykorzystamy polityki, aby każdą z ról i ich poziomów dostępu traktować jako osobny obiekt.
Definicja interfejsu Polityki
Zaczniemy od zdefiniowania interfejsu AccessPolicy
, który opisuje, jakie metody muszą implementować poszczególne polityki.
interface AccessPolicy { public function hasAccess(): bool; }
Implementacja konkretnych polityk
Zdefiniujemy kilka przykładowych polityk opartych na rolach: AdminPolicy
, EditorPolicy
oraz ViewerPolicy
.
class AdminPolicy implements AccessPolicy { public function hasAccess(): bool { return true; // Admin ma pełny dostęp } } class EditorPolicy implements AccessPolicy { public function hasAccess(): bool { // Przykład: dostęp do edytowania, ale brak pełnych uprawnień administracyjnych return true; } } class ViewerPolicy implements AccessPolicy { public function hasAccess(): bool { // Przykład: dostęp tylko do odczytu, brak możliwości edycji return false; } }
Klasa użytkownika, która korzysta z polityk
Stworzymy klasę User
, która będzie mogła ustawić swoją politykę dostępu i sprawdzić, czy ma dostęp do określonych funkcji.
class User { private AccessPolicy $policy; public function __construct(AccessPolicy $policy) { $this->policy = $policy; } public function hasAccess(): bool { return $this->policy->hasAccess(); } }
Przykładowe użycie wzorca Polityka
Teraz możemy łatwo tworzyć różne obiekty User
, każdy z przypisaną do niego odpowiednią polityką.
$adminUser = new User(new AdminPolicy()); echo $adminUser->hasAccess() ? "Admin has access" : "Admin has no access"; // Output: Admin has access $editorUser = new User(new EditorPolicy()); echo $editorUser->hasAccess() ? "Editor has access" : "Editor has no access"; // Output: Editor has access $viewerUser = new User(new ViewerPolicy()); echo $viewerUser->hasAccess() ? "Viewer has access" : "Viewer has no access"; // Output: Viewer has no access
Rozszerzanie wzorca Polityka
Dzięki wzorcowi Polityka możemy łatwo dodawać nowe polityki, takie jak np. GuestPolicy
lub SubscriberPolicy
, implementując po prostu interfejs AccessPolicy
.
Taki kod jest również łatwo testowalny, ponieważ każdą politykę można testować niezależnie.
Zastosowanie wzorca Polityka w Laravelu
Laravel posiada mechanizm polityk dostępu, który implementuje wzorzec Polityka. Możemy w prosty sposób tworzyć polityki, generując je komendą php artisan make:policy
, a następnie implementować logikę dostępu w tych klasach.
Podsumowanie
Wzorzec Polityka pozwala na eleganckie zarządzanie złożonymi regułami decyzyjnymi, upraszczając kod i poprawiając jego elastyczność. Wyżej opisane przykłady w PHP pokazują, jak skutecznie zastosować go do kontroli dostępu, ale jest on równie przydatny w innych obszarach, takich jak np. walidacja, przetwarzanie transakcji czy definiowanie zasad biznesowych.
Zastosowanie wzorca Polityka pozwala zminimalizować powtarzalność kodu i upraszcza proces wdrażania nowych funkcji lub logiki do aplikacji, co znacząco wpływa na wydajność i elastyczność oprogramowania.
Nikt jeszcze nie komentował. Bądź pierwszy!