Inici de sessió d'usuari


El Patró de Disseny Model-Vista-Controlador


El patró de disseny Model-Vista-Controlador és una mica vell. Aquesta s'ha completat des dels dies de l'Smalltalk. És un patró d'alt nivell en que es preocupa de si mateix amb l'arquitectura global d'un programa i intenta proporcionar una classificació dels diferents tipus d'objectes que formen una aplicació.

D'acord amb el patró, hi ha tres tipus d'objectes: objectes model, objectes vista i objectes controlador. El patró defineix els rols que juguen aquests tipus d'objectes en l'aplicació; com a desenvolupador, dissenyes les teves classes per entrar dins d'aquests tres grups. Cadascun d'aquests tres tipus d'objectes estan separats dels altres per uns límits abstractes i es comuniquen amb els objectes dels altres tipus a través d'aquest límits.

Els Objectes Model Representen les Dades i els Comportaments Bàsics

Els objectes model representen coneixements i experiència especials. Mantenen les dades d'una aplicació i defineix la lògica que manipula aquestes dades. Una aplicació MVC ben dissenyada té totes aquestes dades importants encapsulades en els objectes model. Qualsevol dada que forma part de l'estat persistent de l'aplicació (si aquest estat persistent és emmagatzemat en fitxers o bases de dades o targetes perforades) ha de residir en els objectes model un cop les dades s'han carregat dins l'aplicació.

Idealment, un objecte model no té connexió a la interfície d'usuari utilitzada per representar-lo i editar-lo. Per exemple, si tens un objecte model que representa una persona (diguem que has escrit una agenta), podrien voler emmagatzemar la data d'aniversari. Això és quelcom bo de guardar en el teu objecte model Persona. Tanmateix, emmagatzemant una data en format de cadena de caràcters o una altra informació en que es representen les dates és probablement millor que qualsevol altra.

En la pràctica, aquesta separació no és sempre la millor forma, i hi ha algunes opcions per
flexibilitzar-ho, però en general un objecte model no hauria d'estar relacionat amb la interfície i la fora de presentar-la. Un exemple en que l'excepció és una mica raonable és una aplicació de dibuixat que té les objectes model que representar les gràfics mostrats. Té sentit per que els objectes gràfics sàpiguen dibuixar-se a ells mateixos doncs la principal raó de la seva existència és definir quelcom visual. Però fins i tot en aquest cas, els objectes gràfics no haurien de limitar-se a residir en una vista en particular o en cap vista, i no han d'encarregar-se de saber quan han de dibuixar-se. Haurien de demanar'ls-hi per ser dibuixats per l'objecte vista que vol representar-los.

Els Objectes Vista Presenten la Informació a l'Usuari

Un objecte vista sap com mostrar i possiblement editar dades del model de l'aplicació. La vista no hauria de responsabilitzar-se de guardar les dades sinó de mostrar-les. (Això no vol dir que la vista mai guarda les dades que està mostrant, per descomptat. Una vista pot depositar dades o fer quelcom semblant per raons de funcionament). Un objecte vista pot encarregar-se de mostrar només una part d'un objecte model, o un quants objectes model, o fins i tot molts objectes model diferents. Les vistes venen en moltes varietats.

Els objectes vista tendeixen a ser reutilitzables, i proporcionen consistència entre aplicacions. A Cocoa, l'Application Kit defineix un nombre extens d'objectes vista. Per reutilitzar els objectes vista de l'Application Kit, com seria un NSButton, has de garantir que els botons en la teva aplicació seran semblants als botons de qualsevol altra aplicació Cocoa, proporcionant a l'usuari en un alt nivell de predictibilitat en característiques a través de les aplicacions.

Una vista ha d'assegurar que mostra el model correctament. Conseqüentment, usualment necessita conèixer els canvis del model. Donat que els objectes model no estan lligats directament als objectes vista, necessiten una forma genèrica d'indicar que han canviat. Cap a aquest fi, poden publicar NSNotifications quan canvien o definir una altra forma general de passar les notificacions dels canvis a les vistes, normalment a través de la capa controlador.

Els Objectes Controlador Lliguen el Model a la Vista

Un objecte controlador actua com a intermediari entre els objectes vista d'aplicació i els seus objectes model. Típicament els objectes controlador tenen la lògica específica d'una aplicació. Els controladors sovint s'encarreguen d'assegurar que les vistes tinguin accés als objectes model que ells necessiten mostrar i sovint actuen com un conducte a través del qual les vistes aprenen dels canvis del model.

Confinant el codi específic de l'aplicació als objectes controlador, fas que els objectes model i vista siguin molt més generals i reutilitzables. Els controladors sovint són els objectes menys reutilitzables en una aplicació, però això és acceptable. No pots reutilitzar-ho tot i si mantens el codi no-reutilitzable en la capa controlador, tens millors ocasions de reutilitzar els altres objectes.

La capa controlador freqüentment conté moltes línies de codi. Per fer aquesta quantitat de codi més manejable, de vegades és útil sub-dividir la capa controlador dins de "model-controlador" i "vista-controlador".

Un model-controlador és un controlador que té a veure més amb si mateix que amb la capa model. "Posseeix" el model; la seva responsabilitat principal és gestionar el model i comunicar-la amb qualsevol objecte vista-controlador. Els mètodes acció que s'apliquen al model seran típicament implementats en el model-controlador. L'arquitectura document et proporciona un nombre d'aquests mètodes; per exemple, l'NSDocument automàticament enllaça els mètodes acció relacionats amb els fitxers a guardar.

Una vista-controlador és un controlador que té a veure més amb si mateix que amb la cap vista. "Posseeix" la interfície (les vistes); la seva responsabilitat principal és gestionar la interfície i comunicar-la amb el model-controlador. Els mètodes acció basats amb les dades mostrades en una vista serà normalment implementada en una vista-controlador.

La secció "Arquitectura Document" proporciona amb una mica més de detall la diferència entre el model-controlador i la vista-controlador.

Perquè És Important el MVC?

Apple està afegint moltes noves característiques a les frameworks Cocoa, Algunes d'aquestes característiques, com és l'escripting i el desfer, són relativament d'alt nivell comparats amb els tipus de coses que les frameworks Application Kit i Foudation proporcionaven en el passat. A mida que s'han afegit més i més característiques d'alt nivell, l'assumpció creixerà les aplicacions utilitzant aquestes característiques basades en dissenys d'alt nivell, com el MVC. Com a desenvolupador, necessites estar més involucrat en les àrees del disseny d'aplicacions relacionades amb aquestes característiques.

Encara que els desenvolupadors sempre s'han encoratjat a utilitzar el patró MVC, amb l'afegit de noves característiques com l'arquitectura de document, el suport al desfer, i l'escripting. És més important que sempre els dissenyadors d'aplicacions duguin el patró MVC al cor. Totes aquestes noves característiques d'alt nivell treballen millor si la teva aplicació es dissenya seguint el patró MVC. Això enfortiria l'ús d'aquestes noves característiques si la teva aplicació té una bona separació MVC, però duu més esforç per utilitzar les noves característiques si no has fet una bona separació.

(L'Application Kit és majoritàriament una framework de vista, encara que algunes de les classes més noves acostumen a entrar en la capa controlador i també hi ha uns quants objectes model. La framework Foundation té la majoria dels objecte model juntament amb alguns objectes controladors).