Python e MVC, una storia tutta da scrivere (Prima parte)

Qualche giorno fa, girovagando per l’Universo, ho scoperto un pacchetto fantastico di cui ignoravo completamente l’esistenza: si tratta di python-gtkmvc, contenente un’interessantissima implementazione di MVC per lo sviluppo in Python di applicazioni GTK+.

Prima di illustrarvi le innumerevoli possibilità offerte dai moduli contenuti nel pacchetto in questione, mi sento in dovere di fornirvi perlomeno un’introduzione a MVC: l’acronimo sta per Model-View-Controller (capita sovente di incontrarlo orribilmente tradotto nella lingua di Dante come Modello-Vista-Controllore) e indica uno dei design pattern maggiormente noti e diffusi nello sviluppo di interfacce grafiche, soprattutto negli ambiti della programmazione web (per la quale è nato), basato sul principio di divisione delle responsabilità fra i componenti che interpretano i tre ruoli fondamentali di un sistema software:

  • Model (modello): rappresenta il modello di dominio (o modello business), contiene lo stato del sistema, definisce le operazioni necessarie per accedervi (logica di business) ed è indipendente dalla strato di UI (user interface).
  • View (vista): definisce l’interfaccia utente per interagire con le entità del modello; può fornire una rappresentazione completa o parziale del dominio.
  • Controller (controllore): crea e gestisce la connessione fra il modello e la UI; è a conoscenza dello stato dell’applicazione e mantiene aggiornata la sua rappresentazione.

Chi ha studiato un minimo di analisi e progettazione del software avrà sicuramente avuto a che fare con il pattern Controller, che delega la gestione e il coordinamento dei messaggi provenienti dall’interfaccia ad un oggetto controllore (FacadeController, UseCaseHandler, ecc.), il quale non deve nè appartenere allo strato di UI nè occuparsi della risposta del sistema alle richieste dell’utente; completamente diverso è il controller MVC, parte integrante dell’interfaccia, controllata e gestita in maniera diretta dallo stesso controllore, che provvede anche all’aggiornamento della vista in base al contenuto del modello.

Chiariti i punti fondamentali, possiamo iniziare a esplorare pygtkmvc. Innanzitutto, installiamolo con:

sudo apt-get install python-gtkmvc python-gtkmvc-doc

Nei repository ufficiali di Ubuntu 8.04 «Hardy Heron» è presente la 1.2.1, mentre l’ultima versione è scaricabile dal mio archivio personale; per aggiungere quest’ultimo alla propria lista dei repository è sufficiente inserire la seguente riga nel proprio /etc/apt/sources.list:

deb http://ppa.launchpad.net/quadrispro/ubuntu hardy main

Una volta installato tutto il necessario, cerchiamo di capire come funziona. Innanzitutto, analizziamo l’esempio fornito con la documentazione, cominciando dal modello definito nel file model.py:

from gtkmvc.model import Model

class MyModel (Model):

# observable properties:

__properties__ = { ‘counter’ : 0 }

def __init__(self):

Model.__init__(self)

return

pass # end of class

Il codice è molto semplice: viene definita una nuova classe MyModel, che estende la classe base Model, fornita dal framework, nel corpo della quale vengono dichiarati e inizializzati degli attributi osservabili (in accordo con Observer, esiste una letteratura infinita che tratta di tale pattern).

Page 1 of 3 | Next page