• No results found

Exempel på MVC-struktur för Sektion: Nyhetlista

8.5 Svårigheter, konsekvenser och risker

8.5.3 Detaljstudie av modeller och svårigheter

8.5.3.2 Exempel på MVC-struktur för Sektion: Nyhetlista

Nedan följer ett exempel på hur sektionen efter analysen kan delas upp för att uppnå en MVC-struktur:

Figur 8. Exempel på MVC-struktur.

Förklaring av modellen enligt MVCs olika beståndsdelar:

Model är markerat i rött på bilden och består då av all datalogik för hela sektionen. Model skapas i Model-mappen som en egen fil med ett namn som motsvarar vad det är för modell, till exempel Nyheter_model.php. Nyheter_model innehåller då all datalogik för Nyhets-objekt

36

som används i systemet. En klassfil med innehållande klass för att kunna hantera Nyhets-objekt i systemet implementeras. Namnet för klass-filen namnges efter vad för typ av Nyhets-objekt den representerar, i detta fallet nyheter. Ett bra namn kan då vara Nyhet. Klassen innehåller egenskaper som titel, brödtext och skribent för en nyhet. Dessa egenskaper går sedan att använda i systemet där Nyhets-objekt hanteras. För denna sektion skapas en funktion i Nyheter_model som heter Nyhetslista, som innehåller logiken markerat i rött ovan. När Nyhetslista-funktionen blir anropad av controllern så returneras en array (Array3 på bilden) innehållande flera Nyhets-objekt.

View är markerat med grönt på bilden. Enligt modellen ovan så kommer View-delen enbart bestå av presentationslogiken för objektet från modellen. Viewn skapas i en mapp under View-mappen med ett namn som motsvarar vilken modell den presenterar, i detta fallet Nyhetlista. I Nyhetslista-mappen kan då en index-fil för Viewn skapas. Presentationslogiken i detta fallet består av kod som itererar igenom och presenterar Array3 i form av en tabell med länkar till nyheterna.

Controllern för Nyhetslista-viewn anropas när main.php View öppnas. Nyhetlista-controllern anropar Nyheter_model som returnerar ett Nyheter_model-objekt från funktionen Nyhetlista.

Nyhetslista-controllern anropar sedan Nyhetslista-viewn med Nyheter_model-objektet.

När sektionen separeras till Model, View och Controller delas de olika ansvarsområdena för sektionen upp i olika filer, vilka placeras i en logisk mapp-struktur. Nedan visas ett exempel på mapp-strukturen:

Figur 9. Exempel på mapp-struktur enligt MVC.

System med en MVC-arkitektur är uppdelade i följande ansvarsområden; Model (datalogik), View (presentationslogik) samt Controller (inputlogik).

37

Utvecklare kan snabbt hitta en fils sektionstillhörighet och funktion/ansvar i mapp-strukturen när utveckling skall ske.

Ett exempel på underhåll av en presentationsdel i systemet kan vara att presentationen av nyhetslistan ska ändras. Ändringen kan vara att färgen på tabellen eller strukturen på länkarna behöver justeras. Om utvecklaren känner till MVC-strukturen vet denne snabbt att detta sköts i Nyhetlista-viewn, och behöver därför enbart arbeta med den filen.

Ett exempel på vidareutveckling av systemet kan vara att en ny View för att visa en nyhet med brödtext skall öppnas när någon av länkarna i nyhetslistan används. View-delen som ska läggas till använder sig utav någon typ av Nyhets-objekt och därför bör den nya View-delen och tillhörande Controller-del kopplas till Nyheter_model och inkluderas i mapp-strukturen med namn som knyter dom till Nyheter. Ny funktionalitet i Nyheter_model implementeras för att returnera ett Nyhet-objekt som representerar en nyhet. Funktionaliteten för att returnera Nyhet-objektet till den nya View-delen är kod som manipulerar data till den form som view-delen behöver. Kod som används i Model-view-delen för detta arbete kan vara bland annat PHP och MySQL.

Nedan visas en figur av hur mapp-strukturen ser ut efter tillägget av Nyhet_controller och Nyhet-view:

Figur 10. Exempel på mapp-struktur enligt MVC med tillägg av Nyhet_controller och Nyhet-view.

Nyhet-klassen och Nyheter-models funktionalitet för att returnera en nyhet i pseudokod:

Titelparameter, brödtextparameter samt skribentparameter är parametrar som skickas med anropet av Nyhet-klassen från Model-delen.

38

Sätter Titel = titelparamter, Brödtext = brödtextparameter och Skribent = skribentparameter.

} }

Nyhetsparameter nedan motsvarar det värde som representerar vilken nyhet som skall returneras.

Klass Nyheter_model {

Funktion Nyhet(Nyhetsparameter) {

MYSQL-fråga(Nyhetsparameter) hämtar datan som representerar den hela nyheten för motsvarande Nyhetsparameter ur

databasen.

Skapar ett nytt Nyhet-objekt med datan från MYSQL-frågan.

Ny Nyhet-objekt(titelparameter, brödtextparameter, skribentparameter)

Returnerar Nyhet-objektet.

} }

Den nya View-delen som ska presentera nyheten i länken i Nyhetslista namnges efter vilken typ av model-objekt den presenterar, i detta fall Nyheter_model och därför kan ett passande namn för view-delen vara Nyhet. Nyhet-viewn placeras i View-mappen under Nyheter-mappen. Presentationslogiken för Nyhet-viewn innehåller kod för att iterera igenom och presentera innehållet i Nyhet-objektet. Kod som används i View-delen kan vara bland annat PHP, HTML samt CSS.

Exempel på hur Nyhet-viewn kan se ut i pseudokod:

Skapa tabell Skapa ny rad

Skapa ny kolumn med innehållet Nyhet.Titel Skapa ny rad

Skapa ny kolumn med innehållet Nyhet.Brödtext Skapa ny rad

Skapa ny kolumn med innehållet Nyhet.Skribent Avsluta tabell

39

En ny Controller-del som anropas, när någon av länkarna i Nyhetslista-view används, implementeras för att visualisering av den nya View-delen ska vara möjlig. Den nya Controller-delen namnges efter den View-del den hör ihop med, i detta fall Nyhet-view.

Controller-delen bör då namnges Nyhet_controller för att kopplingen mellan dessa ska vara självklar. Beroende på vilken nyhet som länken representerar kommer Nyhet_controller anropa Nyheter_models funktionalitet som returnerar en nyhet i form av ett Nyhet-objekt.

Nyhet_controllern anropar sedan Nyhet-viewn med Nyhet-objektet.

Exempel på hur Nyhet_controllern kan se ut i pseudokod:

Nyhetsvärde representerar det värde som ska användas för att hitta rätt nyhet i model-delen vid anropet.

Klass Nyhet_controller {

Egenskap för att hålla nyhetsparametern:

Nyhetsparameter.

Skapa ny model och använd Funktion Nyhet (Nyhetsparameter) Anropa index.php i Nyhet mappen.

} }

Related documents