Een ontwerppatroon is een conceptueel model dat je helpt om ontwerpproblemen in verschillende contexten op te lossen. Het is als een herbruikbaar sjabloon dat je kunt toepassen om code te structureren.
Tijdens het werken aan een projectHet is cruciaal om te onthouden dat je het wiel niet opnieuw wilt uitvinden. Als een oplossing voor een probleem effectief is gebleken, zal het hergebruik ervan je veel tijd en hoofdpijn besparen. Bij dilemma's op het gebied van systeemarchitectuur hebben we een aantal patronen ontwikkeld om het ontwerpproces te vergemakkelijken.
Wat is een ontwerppatroon?
Een ontwerppatroon is een conceptueel model dat je helpt om ontwerpproblemen in verschillende contexten op te lossen. Het is als een herbruikbaar sjabloon dat je kunt toepassen op een structurerende code. Design patterns zijn namelijk goed gedocumenteerd, bewezen en algemeen bekend. Met andere woorden, gebruik een goed ontwerppatroon en wees er zeker van dat andere insiders op het gebied van ontwerppatronen (aka je collega's) je ideeën vlot zullen begrijpen.
Nieuwsgierig om te leren? Hier komt het Strategy Design Pattern.
Het strategie-ontwerppatroon:
definieert een familie van algoritmen,
implementeert elk van de algoritmen als een afzonderlijke entiteit,
maakt het mogelijk om elk van de algoritmen door elkaar te gebruiken in een bepaalde context.
Voorbeeld uit het echte leven? Authenticatie
In een van onze apps hebben we een aantal strategieën geïmplementeerd voor het verifiëren van verzoeken. We staan authenticatie toe met cookies, JWT-tokens en API-sleutels. Klinkt als een familie van algoritmen.
Laten we eens kijken naar een voorbeeldimplementatie.
We hebben onze familie van authenticatiealgoritmen onderverdeeld in drie aparte klassen. Elke klasse definieert het concrete gedrag; het is waar alle implementatiedetails naartoe gaan:
module AuthenticatieStrategieën
klasse cookiesauthenticatie
def self.authenticate_request(request)
puts "Ik implementeer een cookie-authenticatie-algoritme".
einde
einde
klasse JWTAuthenticatie
def self.authenticate_request(request)
puts "Ik implementeer een jwt-authenticatiealgoritme".
einde
einde
klasse ApiKeyAuthenticatie
def self.authenticate_request(request)
puts "Ik implementeer een algoritme voor authenticatie met een api-sleutel".
einde
einde
einde
Dan hebben we een context/client klasse:
Klasse Authenticatie
def self.authenticate(authenticatie_strategie, verzoek)
authenticatie_strategie.authenticeer_verzoek(verzoek)
einde
einde