Designmönster är ett sätt att tänka på programmering.
De erbjuder en samling råd, färdiga metoder, bästa praxis och insikter om utveckling. För varje programmeringsparadigm och uppgiftstyp finns det vissa designmönster som är bäst lämpade.
Inom programmering är det repetitivt att lösa vissa typer av problem, så det är vettigt att välja en metod för att lösa dessa problem och upprepa den metoden.
Den största fördelen uppstår särskilt under utveckling i team, när alla vet hur programmet ska utvecklas (enligt vilket designmönster) och de bara tillämpar det. På så sätt slipper man onödiga tiotals timmar av felsökning av konstigt skriven kod och försök att förstå vilka principer författaren avsåg.
Mitt favoritdesignmönster är "MVC" (från "Model View Controller"), som innebär att programmet är uppdelat i tre oberoende lager som anropar varandra sekventiellt och skickar data till varandra.
När en sida visas kan det till exempel se ut som om den först bestämmer vilken typ av sida det är (till exempel en kategoridetalj) och därför anropar CategoryController
med metoden detail
.
Ett konkret exempel (jag förenklar mycket):
class CategoryController{public CategoryManager $categoryManager;public function actionDetail(string $id): void{$this->template->id = $id;$this->template->category = $this->categoryManager->getById($id);}}
Note:
Det här är bara en exempelkod som förklarar principen för designmönstret
MVC
.I ett verkligt genomförande skulle vi behöva ta reda på hur vi till exempel kan hämta en instans av
CategoryManager
och hur vi kan skicka den till egenskapen. Vanligtvis används "injektion av beroenden" för denna typ av uppgift.
Innan sidan för kategoridetaljerna visas kallas först CategoryController
för att ta emot den faktiska begäran (dvs. vi visar kategoridetaljerna med ett visst ID, som routern hämtar, t.ex. i URL:en), hämta data (genom att fråga efter motsvarande Model
) och skicka de slutliga uppgifterna till mallen för visning.
Den stora fördelen med denna princip är att vi kan skriva många modeller (programlogik) som är oberoende av hur data presenteras (mallen), vilket ger återanvändbar kod. Om vi vill använda CategoryManager
i ett annat projekt skickar vi helt enkelt data genom Controller
på ett visst sätt, som kommer att återges enligt den mall som definieras av projektet självt, medan programlogiken förblir densamma och ingen bryr sig, eftersom programvarulagret har uppfyllt sitt överenskomna gränssnitt och ansvar.
Praktisk anmärkning:
Designmönstret
MVC
används av de flesta moderna ramverk som Nette, Symfony, Laravel och andra.Vi kan också stöta på
MVC
i utvecklingen av mobilappar och andra typer av programvara där vi behöver hämta data och återge den i en mall enligt sid- eller visningstyp.
Inom programmering finns det i allmänhet många designmönster som inte lämpar sig för webbutveckling. Den här listan beskriver de viktigaste mönstren som jag själv använder och som du bör känna till.
En komplett lista över alla designmönster, exempel på hur de används och detaljerade förklaringar finns på en separat sida.
Dependency injection
, där varje tjänst har bara en instans, som skickas över hela programmet).Adapter
data från den ena typen till den andra (vanligtvis konverteras inhemska PHP-datatyper till databastyper och tillbaka igen).Det finns många fler designmönster, men de här är de viktigaste du bör känna till.
Vissa tekniker för programutveckling anses vara "anti-mönster", vilket är raka motsatsen till ett designmönster. Det är vanligtvis en teknik som ger upphov till konstig kod som inte är lätt att felsöka eller underhålla och som beter sig "magiskt".
Ett typiskt exempel är användningen av globala 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: ... | sv