Iniciació al patró MVC

Fa una setmana i poc vaig decidir donar el pas i començar a dissenyar l’arquitectura d’una pàgina web que estic fent seguint amb el sistema MVC (Model-Vista-Controlador). Pel que havia llegit era la forma més avançada de programar en PHP i la millor forma de dissenyar un site. Les seves avantatges són la gran facilitat de manteniment i modificació d’una web ja que aquest sistema utilitza la POO (Programació Orientada a Objectes).

Sincerament, no m’ha sigut fàcil entendre el concepte i el funcionament del sistema, però després d’haver invertit MOLTES hores ja he trovat el camí, i vull fer aquest post per deixar constància i publicar alguns consells que faciliti a altres la introducción al tema. Una de les coses que més m’han dificultat el entendre com funcionaba ha sigut la gran complexitat dels exemples i el lleguantge massa tècnic. En aquest escrit intentaré utilitzar explicacions clares i fàcils d’entendre. Això sí, aconsello abans de començar amb el MVC entendre una mica sobre la POO en PHP. Comencem!

El patró MVC entén la web com que està formada en tres capes. Aquí va una explicació, que al començament sonarà a xinés, però és bàsic mig entendre-ho.

Model seria la capa que engloba la forma que la web tindrà de fer les coses, és a dir, les classes amb els seus mètodes, i l’accés i manipulació de la base de dades.

Vista seria la part visible de la web, i que presenta el html (acostuma a estar representada amb una classe).

Controlador és el que enllaça el Model i la Vista, i que segons la pàgina que estigui visitant el que navega imprimirà una vista o realitzarà unes accions.

Dit això, s’ha de tenir molt clar que és una forma d’estructura el site molt diferent a lo habitual. Pot comparar-se al disseny modular, perque el MVC pot tenir l’estructura html composada en diferents arxius (una estructura html carrega dins una altra pàgina html), però com deia és bastant més complex perque això és fa a través de la capa Vista.

Ara per començar a donar forma a tot això com es reflecteix en una web expondré una possibilitat d’estructura de carpetes:

/classes
/controladors
/html

La carpeta classes conté la capa de Model. Aquí es troven les classes que defineixen els objectes a la web, la connexió a la base de dades, la configuració, etc. La carpeta html correspondria a la capa Vista i és on estarien els arxius que contenen el html, de la mateixa forma que seria en una web modular. L’última capa del patró, la del Controlador, estaria personificada per la carpeta controladors. Aquí van les classes que controlen el que l’usuari fa a la web. És a dir, hi ha una classe que segons la URL que rebi entén on està l’usuari i a partir d’aquí crida al classe controladora corresponent que li diu què ha de mostrar en pantalla. Un exemple per entendre-ho millor:

Imaginem una web que té un sistema d’usuaris per registrar-se. Entrem a la web. Tan sols entrant una classe anomenada, per exemple, cerca_controlador busca el controlador corresponent el qual s’encarregarà de decidir quina pàgina de la carpeta html s’ha de mostrar. Imaginem que ens volem registrar a la pàgina i cliquem al link per fer-ho. En canviar de pàgina el objecte cerca_controlador buscarà el controlador que decidirà quina nova pàgina de la carpeta html mostrar. I així continuament. El mateix controlador s’encarregarà de demanar a les classes del Model que li passin les dades que pertoquin segons l’acció de l’usuari, i el controlador li farà arrivar a la Vista. Per entendrens, el controlador és l’intermediari.

Així doncs, tenim que el controlador utilitza les classes del Model per recollir la informació necessària, i un cop recollida la passa a la Vista. I com la passa a la Vista? Doncs amb una classe especial que s’encarrega de fer-ho.

Arrivats a aquest punt recordem que, el Model són un seguit de classes que interactuen amb la base de dades. Que la Vista són arxius php que contenen l’html que es veurà quan es navegui, i que el Controlador són classes que decideixen la pàgina que ha d’imprimir la Vista i la seva informació.

Potser ara tens un poti-poti al cap, és normal, calen exemples molt més concrets per acavar d’entendre tot això. Deixaré tot seguit els links que més m’han ajudat:

Building a simple MVC system with PHP5
Article-tutorial que mostra com construir de forma fàcil i simple un sistema MVC. És realment interessant anar seguint pas a pas com es crea la web. Jo vaig acavar d’entendre-ho així.

Patrón MVC
GatorV mostra un sistema molt semblant a l’anterior però força més complert, sobretot en el tema de la Vista. Un cop seguit el tutorial anterior, recomanaria donar un cop d’ull a aquest article.

Patrón ActiveTable y ActiveRecord
Un altre article de GatorV que explica com implementar aquests complements al sistema MVC i que millora la forma d’introduïr dades a la BD.

Comprendiendo Zend Framework, Parte 2: Modelo Vista Controlador
Aquest és el primer de cinc articles que parlen de com funciona Zend Framework. Ajuda força a entendre el concepte de MVC perque Zend Framework utilitza aquest patró per disenyar l’arquitectura de les webs. A mí em va aclarir força el tema del controlador, sobretot als darrers capítols.

Jo tot just començo amb el sistema MVC, però té realment molt bona pinta. Entenc que encara pot arrivar a ser molt més complex de lo vist fins ara. Per exemple, al bloc de GatorV hi ha un altre article que implementa un altre patró, el singleton, per optimitzar les connexions a la BD utilitzant l’objecte PDO de PHP. Recomano també la seva lectura. Potser un altre dia l’expliqui també.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>