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!