Et designmønster er en konseptuell modell som hjelper deg med å løse designproblemer i ulike sammenhenger. Det er som en gjenbrukbar mal du kan bruke til å strukturere koden.
Når du jobber med et prosjekt, er det viktig å huske på at du ikke ønsker å finne opp hjulet på nytt. Hvis en løsning på et problem har vist seg å være effektiv, kan du spare mye tid og hodebry ved å gjenbruke den. Vi har utviklet noen mønstre for å gjøre designprosessen enklere når det gjelder systemarkitekturdilemmaer.
Hva er et designmønster?
Et designmønster er en konseptuell modell som hjelper deg med å løse designproblemer i ulike sammenhenger. Det er som en gjenbrukbar mal du kan bruke til å strukturere kode. Designmønstre er veldokumenterte, velprøvde og allment kjente. Med andre ord, hvis du bruker et riktig designmønster, kan du være sikker på at andre designmønster-innsidere (aka kollegene dine) vil forstå ideene dine uten problemer.
Ivrig etter å lære? Her kommer strategidesignmønsteret.
Det strategiske designmønsteret:
definerer en familie av algoritmer,
implementerer hver av algoritmene som en separat enhet,
gjør at hver av algoritmene kan brukes om hverandre i en gitt sammenheng.
Et eksempel fra det virkelige liv? Autentisering
I en av appene våre har vi implementert noen strategier for autentisering av forespørsler. Vi tillater autentisering med informasjonskapsler, JWT-tokens og API-nøkler. For meg høres det ut som en familie av algoritmer.
La oss ta en titt på et eksempel på en implementering.
Vi har delt inn vår familie av autentiseringsalgoritmer i tre separate klasser. Hver klasse definerer den konkrete oppførselen; det er her alle implementeringsdetaljene går:
modul AuthenticationStrategies
klasse CookiesAuthentication
def self.authenticate_request(forespørsel)
puts "Jeg implementerer en algoritme for cookie-autentisering"
end
end
klasse JWTAuthentication
def self.authenticate_request(forespørsel)
puts "Jeg implementerer en jwt-autentiseringsalgoritme"
end
end
klasse ApiKeyAuthentication
def self.authenticate_request(forespørsel)
puts "Jeg implementerer en api-nøkkelautentiseringsalgoritme"
end
end
end
Deretter har vi en kontekst/klient-klasse:
klasse Autentisering
def self.authenticate(autentiseringsstrategi, forespørsel)
authentication_strategy.authenticate_request(forespørsel)
end
end
request = "Jeg later som om jeg er en forespørsel"
Jeg implementerer en algoritme for cookie-autentisering Jeg implementerer en algoritme for jwt-autentisering Jeg implementerer en algoritme for api-nøkkelautentisering
Oppsummering
designmønstre er nyttige verktøy for å løse arkitektoniske problemer,
kunnskap om designmønstre forbedrer kommunikasjonen om systemarkitektur med andre utviklere,
strategidesignmønsteret passer for deg som har en rekke algoritmer som kan brukes om hverandre i en gitt kontekst.