Le Migliori Pratiche MVC

Sebbene il design pattern Model-View-Controller (MVC) sia conosciuto da quasi tutti gli sviluppatori Web, sfugge ancora a molte persone come usare MVC correttamente nelle applicazioni reali. L'idea centrale che sta dietro MVC è la riutilizzabilità del codice e la separazione delle competenze. In questa sezione sono descritte alcune linee guida generali su come seguire al meglio il design pattern MVC quando si sviluppa un'applicazione con Yii.

Per maggior chiarezza di queste linee guida, si assume che un'applicazione Web sia composta da diverse sotto-apllicazioni, come ad esempio

Le sotto-applicazioni possono essere implementate in termini di moduli, o come applicazione Yii che condivide parti del codice con le altre sotto-applicazioni.

Model

I Model rappresentano la struttura di base dei dati di un'applicazione Web. I Model sono spesso condivisi tra le differenti sotto-applicazioni dell'applicazione Web. Per esempio il model LoginForm può essere usato sia da un'applicazione front- end che da una back-end; il Model News può essere usato dalla console comandi, dalle Web API, e dall'applicazione front/back-end. Quindi i model:

A volte, sequire quest'ultima regola potrebbe portare ad avere un model molto grande, contenente troppo codice in una sola classe. Potrebbe accadere che il model sia più difficile da mantenere qualora esso venga utilizzato per diversi scopi. Ad esempio, il model News potrebbe contenere il metodo getLatestNews il quale può essere utilizzato solo dal front-end; ovvero potrebbe contenere il metodo getDeletedNews il quale è utilizzato solo dal back-end. Ciò può andar bene per un programma di piccole dimesion. Per applicazioni di grandi dimensioni, la strategia seguente può essere usata per rendere i model più mantenibili:

Quindi, se dovessimo utilizzare questa strategia nell'esempio precedente, potremmo aggiungere un model News nell'applicazione front-end che contenga solo il metodo getLatestNews, e aggiungeremmo un'altro model News nell'applicazione back-end che contenga solo il metodo getDeletedNews.

In generale i model non dovrebbero contenere logica che abbia a che fare direttamente con gli utenti finali. Più in dettaglio, i model:

View

Le View sono responsabili della presentazione dei model nel formato desiderato dall'utente. In generale le view:

Le view possono essere riutilizzate in diversi modi:

Controller

I Controller sono il collante che lega tra loro i model, le view ed altri componenti. I Controller hanno l'incarico di avere a che fare direttamente con le richieste dell'utente. Pertanto i controller:

In una applicazione MVC ben progettata, i controller spesso sono molto piccoli, contengono probabilmente solo una dozzina di righe di codice; mentre i model sono molto grandi, contengono la maggior parte del codice responsabile di rappresentare e manipolare i dati. Ciò è dovuto al fatto che la struttura dei dati e la logica di business rappresentata dai model è di solito molto specifica per la particolare applicazione e necessita di essere pesantemente personalizzata per soddisfare le specifiche esigenze dell'applicazione; mentre le logiche di controllo, tra le varie applicazioni, spesso seguono percorsi similari e quindi possono essere ben semplificate dal framework sottostante o dalle classi di base.

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