To jest strategia! Wzorzec projektowania strategii
Sara Klimek
Wzorzec projektowy to model koncepcyjny, który pomaga rozwiązywać problemy projektowe w różnych kontekstach. Jest jak szablon wielokrotnego użytku, który można zastosować do strukturyzacji kodu.
Podczas pracy nad projektNależy jednak pamiętać, że nie chcemy wymyślać koła na nowo. Jeśli rozwiązanie jakiegoś problemu okaże się skuteczne, jego ponowne wykorzystanie zaoszczędzi ci mnóstwo czasu i kilka bólów głowy. W przypadku dylematów związanych z architekturą systemu, opracowaliśmy kilka wzorców ułatwiających proces projektowania.
Czym jest wzorzec projektowy?
Wzorzec projektowy to model koncepcyjny, który pomaga rozwiązywać problemy projektowe w różnych kontekstach. Jest jak szablon wielokrotnego użytku, który można zastosować do strukturyzacji. kod. Rzecz w tym, że wzorce projektowe są dobrze udokumentowane, sprawdzone i powszechnie znane. Innymi słowy, użyj odpowiedniego wzorca projektowego i upewnij się, że inni wtajemniczeni we wzorce projektowe (aka twoi współpracownicy) z łatwością zrozumieją twoje pomysły.
Chętny do nauki? Oto Wzorzec Projektowania Strategii.
Wzorzec projektowania strategii:
definiuje rodzinę algorytmów,
implementuje każdy z algorytmów jako oddzielną jednostkę,
pozwala na wymienne stosowanie każdego z algorytmów w danym kontekście.
Przykład z życia wzięty? Uwierzytelnianie
W jednej z naszych aplikacji wdrożyliśmy kilka strategii uwierzytelniania żądań. Zezwalamy na uwierzytelnianie za pomocą plików cookie, tokenów JWT i kluczy API. Dla mnie brzmi to jak rodzina algorytmów.
Przyjrzyjmy się przykładowej implementacji.
Nasza rodzina algorytmów uwierzytelniania została podzielona na trzy oddzielne klasy. Każda klasa definiuje konkretne zachowanie; to tam trafiają wszystkie szczegóły implementacji:
moduł AuthenticationStrategies
class CookiesAuthentication
def self.authenticate_request(request)
puts "Wdrażam algorytm uwierzytelniania plików cookie"
end
end
class JWTAuthentication
def self.authenticate_request(request)
puts "Implementuję algorytm uwierzytelniania jwt"
end
end
class ApiKeyAuthentication
def self.authenticate_request(request)
puts "Implementuję algorytm uwierzytelniania klucza api"
end
end
end
Następnie mamy klasę kontekstu/klienta:
class Uwierzytelnianie
def self.authenticate(authentication_strategy, request)
authentication_strategy.authenticate_request(request)
end
end