Designmønstre er en måde at tænke programmering på.
De giver en samling af råd, færdige metoder, bedste praksis og indsigt i udvikling. For hvert programmeringsparadigme og hver opgavetype er der visse designmønstre, der er bedst egnede.
I programmering er det gentagende at løse visse typer problemer, så det giver mening at vælge én metode til at løse disse problemer og gentage den metode.
Den største fordel opstår især under teamudvikling, når alle ved, hvordan applikationen skal udvikles (i henhold til hvilket designmønster), og de anvender det bare. Dette eliminerer de unødvendige mange timers fejlfinding af mærkeligt skrevet kode og forsøg på at forstå de principper, som forfatteren har tænkt sig.
Mit foretrukne designmønster er MVC
(fra Model View Controller
), som siger, at programmet er opdelt i 3 uafhængige lag, der kalder hinanden sekventielt og videregiver data til hinanden.
Når en side gengives, kan det f.eks. se ud, som om den først beslutter, hvilken type side det er (f.eks. en kategoridetalje), og kalder derfor CategoryController
med metoden detail
.
Et konkret eksempel (jeg forenkler meget):
class CategoryController{public CategoryManager $categoryManager;public function actionDetail(string $id): void{$this->template->id = $id;$this->template->category = $this->categoryManager->getById($id);}}
Note:
Dette er kun en prøvekode, der forklarer princippet i
MVC
-designmønsteret.I en rigtig implementering ville vi være nødt til at finde ud af, hvordan vi f.eks. kan få et eksempel på
CategoryManager
og hvordan vi kan overføre det til egenskaben. Typisk brugesDependency injection
til denne type opgaver.
Før siden med kategoridetaljerne vises, kaldes CategoryController
først for at modtage den faktiske anmodning (dvs. vi viser kategoridetaljerne med et bestemt ID, som routeren f.eks. får i URL'en), hente dataene (ved at spørge den tilsvarende Model
) og sende de endelige data til skabelonen til visning.
Den store fordel ved dette princip er, at vi kan skrive mange modeller (applikationslogik), som er uafhængige af den måde, dataene præsenteres på (skabelonen), hvilket resulterer i genanvendelig kode. Hvis vi ønsker at bruge CategoryManager
i et andet projekt, skal vi blot sende dataene gennem Controller
på en bestemt måde, som vil blive gengivet i overensstemmelse med den skabelon, der er defineret af projektet selv, mens applikationslogikken forbliver den samme, og ingen bekymrer sig om det, fordi softwarelaget har opfyldt sin aftalte grænseflade og sit ansvar.
Praktisk note:
MVC
designmønsteret bruges af de fleste moderne frameworks såsom Nette, Symfony, Laravel og andre.Vi kan også støde på
MVC
i udvikling af mobilapps og andre typer software, hvor vi skal hente data og gengive dem i en skabelon i overensstemmelse med side- eller visningstypen.
Generelt er der mange designmønstre inden for programmering, som ikke er egnede til webudvikling. Denne liste beskriver de vigtigste mønstre, som jeg selv bruger, og som du bør være bekendt med.
Du kan finde en komplet liste over alle designmønstre, eksempler på deres anvendelse og detaljerede forklaringer på en separat side.
Model
(programlogik og data), View
(skabelon og datavisning) og Controller
(der forbinder Model
og View
).Dependency injection
, hvor hver tjeneste kun har én instans, som sendes på tværs af programmet).Adapter
data fra den ene type til den anden (typisk konverteres native PHP-datatyper til databasedatatyper og tilbage igen).Der findes mange flere designmønstre, men disse var de vigtigste, som du bør kende.
Nogle programmeringsudviklingsteknikker betragtes som "anti-mønstre", hvilket er det stik modsatte af et designmønster. Det er normalt en teknik, der producerer mærkelig kode, som ikke er let at fejlfinde og vedligeholde, og som opfører sig "magisk".
Et typisk eksempel er brugen af globale variabler.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | da