L'architettura di Opencart: Model View Controller (MVC)


Nell'articolo precedente ho illustrato una nuova funzionalità di Opencart da me implementata, ma non avevo ancora spiegato l'archiettura di questo software e-commerce.

Gli sviluppatori di tale applicativo hanno utilizzato per la sua implementazione la metodologia del Model View Controller (MVC), basata sulla suddivisione dei componenti in 3 ruoli principali:

1) il model, fornisce i metodi per accedere ai dati (si interfaccia direttamente con il Database);
2) il controller, accede ai dati forniti dal model e li rende disponibili al view (contiene la parte "funzionale" del codice);
3) il view visualizza i dati forniti dal controller e si occupa dell'interazione con l'utente (attraverso il controller).

Questo schema permette di separare la logica applicativa/funzionale, a carico del controller e del model, dall'interfaccia utente a carico del view.

Nel caso pratico di Opencart ognuna delle 3 componenti sopra descritte è contenuta dentro un'omonima cartella ed inoltre viene separata la parte del negozio (catalog) dalla parte di amministrazione (admin). Quindi riassumendo la struttura delle cartelle di Opencart è così composta:

-> catalog
-> model
-> view
-> controller

-> admin
-> model
-> view
-> controller
Prendendo come esempio pratico la funzionalità di alert descritta nell'articolo precendente, la componente model è definita nel file catalog\model\catalog\alert.php e contiene le funzioni necessarie per l'accesso ai dati contenuti nel Database. Il componente controller, catalog\controller\product\alert.php, richiama il model tramite la riga $this->load->model('catalog/alert') e ne utilizza le funzioni per rendere disponibili le informazioni al view, implementato nel file catalog\view\theme\default\template\product\alert.tpl. Quest'ultimo file è l'interfaccia con l'utente ed è quindi un misto di codice html e php.
In modo analogo è stata implementata la parte di amministrazione (dentro la cartella admin) che non necessitava però di una componente view essendo una funzionalità di back-end.

Continua a leggere...