Kmom02: MVC
Vi tittar på designmönstret Model, View, Controller (MVC) och använder det för att strukturera vår kod i ramverket. Vi har tidigare sett både vyer (V) och kontroller (C) så nu är det dags att väva in M:et som står för model, modell-klasser och/eller modell-lagret.
Vi bekantar oss även med begreppet SOLID som är en akronym för en samling designmönster som är aktuella i sammhanget kring ramverk och allmän objektorienterad utveckling.
Med dessa begrepp i ryggen så skriver vi kod i ramverket som vi strukturerar enligt MVC. Under arbetets gång funderar vi på hur man bäst organiserar sin kod för att göra den återanvändbar, testbar samt lätt att underhålla och vidareutveckla.
Som exempelkod används en REM-server som är byggd enligt MVC med fokus på delarna Model och Kontroller.
(Detta är instruktionen för kursmomentet och omfattar det som skall göras inom ramen för kursmomentet. Momentet omfattar cirka 20 studietimmar inklusive läsning, arbete med övningar och uppgifter, felsökning, problemlösning, redovisning och eftertanke. Läs igenom hela kursmomentet innan du börjar jobba. Om möjligt – planera och prioritera var du vill lägga tiden.)
#Läs & Studera
(ca: 6-10 studietimmar)
#Artiklar
Kika igenom följande artiklar.
Läs artikeln “PHP-baserade och MVC-inspirerade ramverk, vad betyder det?”. Den ger dig en insikt i terminologi och kategorisering av PHP-baserade ramverk, tillsammans med en kort introduktion av Model, View, Controller (MVC).
Bekanta dig med begreppet MVC genom att översiktligt titta på Wikipedia. Titta på både den svenska och den engelska varianten.
Bekanta dig med begreppet SOLID genom att översiktligt titta på Wikipedia. Titta på både den svenska och den engelska varianten.
Läs översiktligt Wikipedia artikeln om “Software design pattern” för att bekanta dig med begreppet. Kika på de designmönster som finns på sidan och se om du kan lägga en handfull av dem på minnet, lite ytligt iallfall. Du vill ha ett hum om vad designmönster innebär och dess terminologi.
#Ramverk referenser
Under kursen skall vi lära oss om ramverk och de moduler och designmönster som bygger upp dagens ramverk. En plats att lära sig om detta är ramverkens manualer. Här följer ett par av de mer använda ramverken och via dess manualer får man en god insikt i hur ett ramverk ser ut och fungerar idag.
Det du kan studera nu är främst att se hur ramverkets router fungerar med en kontroller och om ramverkets manual har något särskilt stycke om MVC. Det räcker att du kikar i två av manualerna. Läs fler vid intresse.
Det finns en fråga om detta som du skall besvara i din redovisningstext.
Dokumentationen för Symfony, ett ledande ramverk inom PHP. Grundaren är Fabien Potencier och en stark profil inom branschen. Företaget Sensiolabs ligger bakom och stödjer utvecklingen.
Dokumentationen för Laravel, Laravel bygger på Symfony men bidrar med ett eget anpassat sätt hur man jobbar i ett ramverk, ett skal ovan Symfony. Bakom Laravel ligger Taylor Otwell som en stark profil.
Dokumentationen för Phalcon. Phalcon är ett PHP-ramverk som är byggt i C/C++ och de bar en bra manual med en egen sektion om MVC. Ramverket skapades av Andres Gutierrez (med flera).
Dokumentationen för Yii. Yii underhålls för närvarande av ett team av utvecklare där flera är från Ryssland och Ukraina. Namnet Yii har kinesisk betydelse och ramverkets grundare heter Qiang Xue.
#Videor
Kika på följande videos.
- Titta på seminariet “PHP UK Conference 2017 - Gareth Ellis - Introduction to SOLID” som ger dig en introduktion till de designmönster som ligger bakom bokstäverna i SOLID och är en grund i ramverkstänkande. Om du tycker videon är “svår/tung” så kan du själv leta reda på motsvarande innehåll som ger dig en intro till begreppet SOLID. YouTube innehåller många små korta videor på ämnet.
#Referensmaterial
Följande används som referensmaterial i kursmomentet.
- En REM-server implementerad i PHP används som exempel för att se hur 100% kodtäckning kan uppnås av kod separerad i kontroller och modell. Det finns källkod för modulen REM-server (med kontroller och modell) och det finns en färdig installation av REM servern. Det finns också en live version av REM servern. Du kan även starta din egen REM server med Docker.
#Övningar & Uppgifter
(ca: 4-8 studietimmar)
#Uppgifter
Dessa uppgifter skall utföras och redovisas.
- Gör uppgiften “En webbtjänst för att geotagga ip-adresser”. Spara koden under
me/redovisa
.
- Pusha och tagga din redovisa, allt eftersom och sätt en avslutande tagg (2.0.*) när du är klar med kursmomentet.
#Resultat & Redovisning
(ca: 2-4 studietimmar)
Läs instruktionen om hur du skall redovisa.
Lägg extra tid på skrivandet i momentet då redovisningstexten är aningen mer omfattande än normalt.
- Vilka tidigare erfarenheter har du av MVC? Använde du någon speciell källa för att läsa på om MVC? Kan du med egna ord förklara någon fördel med kontroller/modell-begreppet, så som du ser på det?
- Kom du fram till vad begreppet SOLID innebar och vilka källor använde du? Kan du förklara SOLID på ett par rader med dina egna ord?
- Har du någon erfarenhet av designmönster och kan du nämna och kort förklara några designmönster du hört talas om?
- Vilka ramverk valde du att studera manualen för och fann du något intressant? Försök relatera mellan det Anax du använder och de ramverk du studerade i manualerna.
- Vilken är din TIL för detta kmom?
Har du frågor eller funderingar som du vill ha besvarade så ställer du dem i GitHub issues.
#Revision history
- 2020-11-09: (D, mos) Mindre justering inför ht20.
- 2018-11-06: (C, mos) Uppdaterad inför v2.
- 2017-09-04: (B, mos) Minskade omfattningen genom att ta bort skrivuppgiften om MVC.
- 2017-08-08: (A, mos) Första utgåvan.