PHP: Programmazione con pattern MVC - Il Model

04 May 2019 | M.A.D.R.

Salve a tutti, come immaginerete si parla di MVC (model, view, controller), ossia un piccolo salto di qualità per le nostre applicazioni, in quanto tutti sappiamo scrivere del codice intrusivo che bene o male faccia del lavoro più o meno idoneo alle nostre esigenze; il vero salto è abituarsi ad uno stile, uno standard capace di mettere in risalto solo le componenti essenziali della nostra applicazione.

Abbiamo parlato in precedenza di Template Engine , quindi in modo indiretto abbiamo già detto che converrebbe separare le logiche di visualizzazione  dalla parte business, occupandoci solo della "V" view, oggi invece cerchiamo di approfondire il ruolo fondamentale della "M" ossia del model.

Come spiegato in precedenza, separando le diverse logiche avremo che il nostro visitatore si interfaccerà solo ed esclusivamente con le View, le quali interagiranno con i nostri Controller che a loro volta avranno il compito di attivare i Model per effettuare qualche operazione sulla nostra Base Dati; possiamo quindi sintetizzare il flusso di lavoro in questo modo:

  1. Utente si collega ad una pagina, entrano in campo per la risoluzione dell'url:
    1. La nostra route (provvede a smistare il traffico e attivare i controller giusti)
    2. Il controller, cercherà di gestire la richiesta nel modo più appropriato, in questo caso il Controller "C", potrà comportarsi in diversi modi:
      1. Nel caso in cui la risorsa sarà una pagina verrà richiamata una View "V" senza dati
      2. Nel caso in cui la risorsa è frutto di elaborazione dati, "C" chiamerà il Model "M", il quale una volta restituirà al Controller i dati recuperati, per inviarli successivamente alla "V".
    3. Model - > BL
    4. View -> Sistema di Template

Quindi stilizzando il concetto, la nostra applicazione dovrà essere a grandi linee in questo modo:

Seguendo le frecce dell’immagine possiamo intuire che il nostro Controller è collegato bidirezionalmente con la View ed il Model.

Serve realmente la strutturazione di un progetto con questa filosofia?

Certo, è oramai diventato quasi lo standard di scrittura del codice, dando delle linee guida per la pulizia dello stesso, garantendo (sempre seguendo in modo strutturato le linee guida) uno strato abbastanza solido per futuri aggiornamenti.

Rende la scrittura dell’applicazione più veloce, la modularità del codice è sicuramente maggiore e soprattutto in team non si sovrappongono ruoli.

Spiegato questo andiamo ad analizzare la nostra “M" il Model.

Il modello dati altro non è che l’implementazione di uno strato capace di soddisfare tutti i vincoli del nostro DB e non. Questo concetto potrebbe sfuggire ai più inesperti, ma facciamo subito un’esempio: “immaginiamo di inserire dei dati attraverso la nostra Vista (“V"), per la precisione immaginiamo di compilare un form di registrazione, e che non tutti i campi sono necessari, inviamo i nostri dati".

Il flusso sarà il seguente View->Controller->Model, ma soffermiamoci al Model: all’interno del model dobbiamo andare a definire tutte le logiche ed i vincoli del nostro input, quindi è impensabile, nonché impossibile che i nostri dati siano inconsistenti e/o corrotti, per questo il Model è importante, forse è il vero cuore della nostra applicazione.

Il Model, dopo aver modellato/mappato i dati nel modo corretto sarà capace di effettuare un’operazione corretta sulla nostra base dati, così da rendere il flusso sempre coerente e corretto, effettuate le operazioni del caso il Model restituirà al Controller i dati aggiornati che saranno visualizzati all’utente tramite una View richiamata dal Controller.

Ricapitolando, l’utilizzo del Pattern MVC si rende necessario per:

  1. Pulizia del codice
  2. Separazione di
    1. Viste
    2. Modelli
    3. Controller
  3. Facilitare lo sviluppo in Team
  4. Rendere facilmente aggiornabile l’applicazione.

La vera differenza tra un codice scritto nella sintassi “Spaghetti Code" (mischiare all’interno dei form del codice PHPe viceversa), è che sarà sempre più baggato rispetto allo stesso codice strutturato secondo delle linee guida.

Soluzioni complete per ogni esigenza