MVC - bästa tillvägagångssätt

Även om nästan alla webbutvecklare är bekanta med termen Model-View-Controller (MVC), undgår det fortfarande många hur MVC korrekt skall användas i faktisk applikationsutveckling. Den centrala idén bakom MVC är återanvändning av kod samt separation av angelägenheter. I detta avsnitt kommer att ges några generella riktlinjer om hur man bättre kan följa MVC vid utveckling av Yii-applikationer.

För att bättre förklara dessa riktlinjer, antar vi att en webbapplikation består av flera underapplikationer, så som

Underapplikationerna kan implementeras i form av moduler, eller som en Yii-applikation som delar viss kod med andra underapplikationer.

Modell (model)

Modeller representerar den underliggande datastrukturen för en webbapplikation. Modeller delas ofta mellan skilda underapplikationer till en webbapplikation. Till exempel kan en LoginForm-modell användas både av förgrunds- och bakgrundsdelen av en applikation; en News-modell skulle kunna användas av konsolkommandon såväl som webb-API:er som förgrunds-/bakgrundsdelarna av en applikation. Detta medför att modeller:

Ibland kan tillämpning av föregående regel göra en modell mycket omfångsrik (fat), med alltför mycket kod i en enda klass. Det kan även medföra att en modell blir svår att underhålla om koden den innehåller är avsedd för olika ändamål. Till exempel kan en News-modell innehålla en metod getLatestNews, som endast används av applikationens förgrundsdel; den kan även innehålla en metod getDeletedNews, som endast används av bakgrundsdelen. Detta kan vara helt i sin ordning för små till medelstora applikationer. För stora applikationer kan följande strategi användas för att göra modeller lättare att underhålla:

Om vi tillämpar denna strategi på vårt exempel ovan, skulle vi i förgrundsapplikationen lägga till en News-modell, endast innehållande getLatestNews-metoden, samt i bakgrundsapplikationen lägga till en annan News-modell, endast innehållande getDeletedNews-metoden.

Rent allmänt bör modeller inte innehålla logik som direkt interagerar med användare. Mer specifikt gäller att:

Vy (view)

Vyer har till uppgift att presentera modeller i det format användarna önskar. Allmänt gäller för vyer att de:

Vyer kan återanvändas på olika sätt:

Kontroller (controller)

Kontroller är limmet som sammanfogar modeller, vyer och andra komponenter till en körbar applikation. Kontroller har till uppgift att direkt handskas med användarens request. Därför gäller för kontroller att de:

I en väl utformad MVC-applikation är kontroller ofta mycket tunna, innehållande endast några tiotal rader kod; modeller är däremot betydligt tjockare, innehållande det mesta av koden som har till uppgift att representera och manipulera data. Detta beror på att datastrukturen och affärslogiken som modeller representerar vanligen är mycket specifika för den aktuella applikationen och behöver långtgående anpassning för att motsvara de specifika kraven på applikationen, medan kontrollerlogik ofta följer ungefär samma mönster i olika applikationer och därför mycket väl kan förenklas av det underliggande ramverket eller basklasser.

$Id: basics.best-practices.txt 2795 2010-12-31 00:22:33Z alexander.makarow $