Disainimuster on kontseptuaalne mudel, mis aitab teil lahendada disainiprobleeme erinevates kontekstides. See on nagu korduvkasutatav mall, mida saab rakendada koodi struktureerimisel.
Töötamise ajal projekt, on oluline meeles pidada, et te ei taha ratast uuesti leiutada. Kui mingi probleemi lahendus on osutunud tõhusaks, säästab selle taaskasutamine teid tohutult aega ja mõnda peavalu. Süsteemiarhitektuuri dilemmade puhul oleme välja töötanud mõned mustrid, et lihtsustada projekteerimisprotsessi.
Mis on disainimuster?
Disainimuster on kontseptuaalne mudel, mis aitab teil lahendada disainiprobleeme erinevates kontekstides. See on nagu korduvkasutatav mall, mida saab rakendada struktureerimise kood. Asi on selles, et disainimustrid on hästi dokumenteeritud, tõestatud ja üldtuntud. Teisisõnu, kasutage korralikku disainimustrit ja olge kindel, et teised disainimustrite asjatundjad (ehk teie kolleegid) saavad teie ideedest sujuvalt aru.
Soovid õppida? Siin tuleb strateegia disainimuster.
Strateegia disainimudel:
määratleb algoritmide perekonna,
rakendab iga algoritmi eraldi üksusena,
võimaldab iga algoritmi kasutada antud kontekstis vahetatavalt.
Reaalse elu näide? Autentimine
Ühes meie rakenduses oleme rakendanud mõned strateegiad päringute autentimiseks. Lubame autentimist küpsiste, JWT-tokenite ja API-võtmete abil. Kõlab nagu algoritmide perekond.
Vaatame näidisrakendust.
Meie autentimisalgoritmide perekond on jagatud kolme eraldi klassi. Iga klass määratleb konkreetset käitumist; sinna lähevad kõik rakendamise üksikasjad:
moodul AuthenticationStrategies
klass CookiesAutentimine
def self.authenticate_request(request)
puts "Ma rakendan küpsiste autentimise algoritmi"
end
end
klass JWTAuthentication
def self.authenticate_request(request)
puts "I implement a jwt authentication algorithm"
end
end
klass ApiKeyAuthentication
def self.authenticate_request(request)
puts "I implement an api key authentication algorithm"
end
end
end
Siis on meil kontekst/klient klass:
klass Autentimine
def self.authenticate(authentication_strategy, request)
authentication_strategy.authenticate_request(request)
end
end