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.
Under arbeidet med en prosjektNår du skal løse et problem, er det viktig å huske 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. Når det gjelder systemarkitekturdilemmaer, har vi utviklet noen mønstre for å gjøre designprosessen enklere.
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 på en strukturerende kode. Saken er at 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.