Den Model-View-Controller (MVC) Design Pattern

February 18

De iOS ramar är objektorienterad. Ett enkelt sätt att förstå vad det egentligen betyder är att tänka på ett lag som arbetar i ett kontor. Det arbete som behöver få gjort delas upp och tilldelas enskilda gruppmedlemmar (i det här fallet, objekt). Varje medlem i teamet har ett jobb och arbetar med andra gruppmedlemmar för att få saker gjorda.

Vad mer, gör ett bra teammedlem inte bryr sig om hur andra medlemmar gör sitt arbete, precis som de gör det i enlighet med den överenskomna arbetsfördelningen. Likaså ett objekt i objektorienterad programmering tar hand om sin egen verksamhet och inte bry sig om vad objektet i den virtuella båset bredvid gör, så länge det kommer att göra vad den ska göra när de ombads att göra det.

Objektorienterad programmering utvecklades ursprungligen för att göra koden mer underhålla, återanvändbara, utbyggbar och begripligt genom att kapsla all funktionalitet bakom väldefinierade gränssnitt. Den faktiska uppgifter om hur något fungerar (liksom dess data) är dolda, vilket gör att modifiera och förlängning en ansökan mycket lättare.

Stor - hittills - men en irriterande fråga plågar fortfarande programmerare:

Exakt hur gör du besluta om objekt och vad var och en gör?

Ibland är svaret på den frågan är ganska enkelt - bara använda den verkliga världen som en modell. I en RoadTrip app, till exempel några av de klasser av modellobjekt är Trip, Evenemang, Destination, och så vidare. Men när det kommer till en generisk programstruktur, hur ska du bestämma vad objekten ska vara? Det kanske inte är så självklart.

MVC mönstret är ett väletablerat sätt att gruppera programfunktioner i objekten. Varianter av det har funnits åtminstone sedan början av Smalltalk, en av de allra första objektorienterade språk. MVC är ett högnivåmönster - det tar upp arkitekturen i en ansökan och klassificerar föremål enligt de allmänna roller de spelar i ett program, snarare än att borra ner i detaljerna.

MVC mönstret skapar i själva verket en miniatyr universum för ansökan, befolkade med tre olika typer av objekt. Den anger också roller och ansvar för alla tre typer av objekt och anger hur de ska interagera med varandra. För att göra det mer konkret (det vill säga att hålla huvudet från att explodera), föreställa sig en stor, vacker, 60-tums platt-TV. Här är kontentan:

  • Modell objekt: Dessa objekt tillsammans utgör innehållet "motor" i din app. De innehåller appens data och logik - gör din app mer än bara ett vackert ansikte.

    Du kan tänka på den modellen (som kan vara ett objekt eller flera som samverkar) som en viss tv-program, en som, uppriktigt sagt, inte ett dugg om vad TV det visas på.

    I själva verket borde modellen inte ett dugg. Även om det äger sin data, bör den ha någon koppling till användargränssnittet och bör vara lyckligt ovetande om vad som är gjort med sina uppgifter.

  • Visa objekt: Dessa objekt visas saker på skärmen och svara på användarens åtgärder. Ganska mycket allt du kan se är en typ av vy objekt - fönstret och alla reglage, till exempel.

    Dina synpunkter vet hur du vill visa information de får från modellobjekt och hur man får någon input från användaren modellen kan behöva. Men själva vyn borde veta något om modellen. Det kan hantera en begäran om att visa vissa händelser, men det behöver inte bry sig vad denna begäran innebär.

    Du kan tänka på utsikten som en tv-skärm som inte bryr sig om vad programmet det visar eller vilken kanal du just valde.

    Ramverket UIKit ger många olika typer av vyer, som du hittar i nästa avsnitt.

    Om vyn vet ingenting om modellen och modellen vet ingenting om utsikten, hur får du uppgifter och andra meddelanden att passera från den ena till den andra? För att få det samtalet igång (Modell: "Jag har precis uppdaterat min data." Visa: "Hej, ge mig något att visa," till exempel), behöver du det tredje elementet i MVC triumviratet, styrenheten.

  • Controller-objekt: Dessa objekt ansluter programmets visa objekt till sina modellobjekt. De levererar visningsobjekt med vad de behöver för att visa (få det från modellen) och även ge modellen med användardata från vyn.

    Du kan tänka på regulatorn som kretsarna som drar showen bort av kabeln och sedan skickar den till skärmen eller begär en viss pay-per-view show.

Den grundläggande applikationsarkitektur ser ut Figur 4-8.

Den Model-View-Controller (MVC) Design Pattern

När du tänker på din ansökan i form av modell, visa och controller objekt, startar ramen UIKit vettigt. Förstå ramverket detta sätt börjar också att lyfta dimman hängande över var att göra åtminstone en del av din ansökan specifika beteende går.

Innan du gräver i det ämnet, dock måste du veta lite mer om de klasser som UIKit tillhandahåller, eftersom dessa är de killar du kommer uppgiften att genomföra MVC design mönster - fönsterklasser, granska klasser, och utsikt controller klasser.

I Objective-C, klasser inkluderar instansvariabler, egenskaper och metoder (som kan komma åt instansvariabler i en klass). Klasserna är om filer i ditt projekt som innehåller kod. Klasserna är typer i ditt program.

Objekt, å andra sidan, finns vid körning och är instanser av en klass. Du kan tänka på en klass som en plan för att bygga upp ett objekt av den typen.