Et designmønster er en konceptuel model, der hjælper dig med at løse designproblemer i forskellige sammenhænge. Det er som en genanvendelig skabelon, du kan anvende til at strukturere kode.
Mens jeg arbejdede på en projektDet er vigtigt at huske, at man ikke skal opfinde den dybe tallerken igen. Hvis en løsning på et problem har vist sig at være effektiv, kan du spare masser af tid og et par hovedbrud ved at genbruge den. I tilfælde af systemarkitekturdilemmaer har vi udviklet nogle mønstre, der kan lette designprocessen.
Hvad er et designmønster?
Et designmønster er en konceptuel model, der hjælper dig med at løse designproblemer i forskellige sammenhænge. Det er som en genanvendelig skabelon, du kan anvende til at strukturere Kode. Sagen er, at designmønstre er veldokumenterede, velafprøvede og almindeligt kendte. Med andre ord: Brug et ordentligt designmønster, og vær sikker på, at andre designmønster-insidere (aka dine kolleger) vil forstå dine ideer uden problemer.
Er du ivrig efter at lære? Her kommer det strategiske designmønster.
Det strategiske designmønster:
definerer en familie af algoritmer,
implementerer hver af algoritmerne som en separat enhed,
gør, at hver af algoritmerne kan bruges i flæng i en given sammenhæng.
Et eksempel fra det virkelige liv? Autentificering
I en af vores apps har vi implementeret et par strategier til at godkende anmodninger. Vi tillader autentificering med cookies, JWT-tokens og API-nøgler. Det lyder som en familie af algoritmer for mig.
Lad os se på et eksempel på en implementering.
Vi har opdelt vores familie af autentificeringsalgoritmer i tre separate klasser. Hver klasse definerer den konkrete adfærd; det er her, alle implementeringsdetaljerne foregår:
modul AuthenticationStrategies
klasse CookiesAuthentication
def self.authenticate_request(request)
puts "Jeg implementerer en cookie-godkendelsesalgoritme"
end
slut
klasse JWTAuthentication
def self.authenticate_request(request)
puts "Jeg implementerer en jwt-godkendelsesalgoritme"
end
end
klasse ApiKeyAuthentication
def self.authenticate_request(request)
puts "Jeg implementerer en api-nøgle-godkendelsesalgoritme"
end
end
end
Så har vi en kontekst/klient-klasse:
klasse Godkendelse
def self.authenticate(authentication_strategy, request)
authentication_strategy.authenticate_request(anmodning)
end
end