Suunnittelumalli on käsitteellinen malli, joka auttaa sinua ratkaisemaan suunnitteluongelmia eri yhteyksissä. Se on kuin uudelleenkäytettävä malli, jota voit soveltaa koodin jäsentämiseen.
Työskennellessään projekti, on tärkeää muistaa, että et halua keksiä pyörää uudelleen. Jos ongelman ratkaisu on osoittautunut tehokkaaksi, sen uudelleenkäyttö säästää paljon aikaa ja päänvaivaa. Järjestelmäarkkitehtuurin pulmia varten olemme kehittäneet joitakin malleja suunnitteluprosessin helpottamiseksi.
Mikä on suunnittelumalli?
Suunnittelumalli on käsitteellinen malli, joka auttaa sinua ratkaisemaan suunnitteluongelmia eri yhteyksissä. Se on ikään kuin uudelleenkäytettävä malli, jota voit soveltaa jäsentävään koodi. Suunnittelumallit ovat hyvin dokumentoituja, todistettuja ja yleisesti tunnettuja. Toisin sanoen, käytä oikeaa suunnittelumallia ja voit olla varma, että muut suunnittelumallien sisäpiiriläiset (eli työtoverisi) ymmärtävät ideasi sujuvasti.
Oletko innokas oppimaan? Tässä tulee strategian suunnittelumalli.
Strategian suunnittelumalli:
määrittelee algoritmiperheen,
toteuttaa kunkin algoritmin erillisenä kokonaisuutena,
mahdollistaa sen, että kutakin algoritmia voidaan käyttää vaihtelevasti tietyssä yhteydessä.
Esimerkki tosielämästä? Tunnistus
Eräässä sovelluksessamme olemme toteuttaneet muutamia strategioita pyyntöjen todentamiseksi. Sallimme todennuksen evästeiden, JWT-tunnisteiden ja API-avainten avulla. Kuulostaa minusta algoritmiperheeltä.
Katsotaanpa esimerkkitoteutusta.
Tunnistusalgoritmien perheemme on jaettu kolmeen eri luokkaan. Kukin luokka määrittelee konkreettisen käyttäytymisen; kaikki toteutuksen yksityiskohdat menevät sinne:
moduuli AuthenticationStrategies
luokka CookiesAuthentication
def self.authenticate_request(request)
puts "Toteutan evästeiden todentamisalgoritmin"
end
end
luokka JWTAtunnistus
def self.authenticate_request(request)
puts "Toteutan jwt-todennusalgoritmin"
end
end
luokka ApiKeyAuthentication
def self.authenticate_request(request)
puts "Toteutan api key authentication algoritmin"
end
end
end
Sitten meillä on context/client-luokka:
luokka Todentaminen
def self.authenticate(authentication_strategy, request)
authentication_strategy.authenticate_request(request)
end
end