Pattern MVP ed Asp.Net – Prima parte

La complessità delle interfacce grafiche, sia in applicazioni Client/Server che Web Based, è costantemente in aumento e quindi nel tempo sono stati proposti diversi strumenti per facilitarne lo sviluppo come l’approccio RAD (Rapid Application Development) e l’introduzione di widget e controlli sempre più complessi e con potenti meccanismi di databinding dichiarativo. Ovviamente tali facility, come ho gia affermato in altre occasioni,  hanno spostato l’attenzione del programmatore sempre più sulla configurazione che sullo sviluppo vero e proprio (in questo caso del layer di presentazione) portando da un lato ad un aumento della produttività iniziale ma dall’altro allo sviluppo di applicazioni monolitiche difficilmente testabili in ambiente isolato e di conseguenza difficilmente estendibili senza incorrere nella prolificazione di bug di riflessione (stiamo parlando dunque di applicazioni difficilmente manutenibili).

Fortunatamente esistono diversi pattern architetturali che tentano di risolvere questo tipo di problematiche. Negli ultimi anni è il pattern MVC (Model View Contoller – Model2) ad essere sotto i riflettori come scelta vincente in tutti quei casi in cui si voglia sviluppare una GUI (Graphic User Interface) fortemente disaccoppiata dalle logiche di business. In effetti MVC è un’elegante soluzione che assolve splendidamente a tale problema, ma in alcuni contesti tecnologici (vedi l’utilizzo di ASP.Net Web Form) che non offrono un supporto nativo a tale pattern “potrebbe” non essere conveniente prendersi l’onere di implementare tutta l’infrastruttura necessaria per la sua implementazione. In questi casi il Pattern MVP è una soluzione da tenere assolutamente in considerazione 😉

Il Pattern MVP

Il pattern MVP (Model View Presenter) risale all’anno 1979 ed il suo nome originario era Thing Model View Editor (coniato dalla Taligent), nel tempo poi evoluto grazie soprattutto a Martin Fowler che ne ha sviluppato due diverse implementazioni Supervising Presenter e Passive View. La soluzione proposta prevede il disaccoppiamento totale della View dalle logiche di manipolazione del Modello tramite l’introduzione di un componente, il Presenter, che funga da intermediario e da coordinatore in risposta alle interazioni con l’utente. Ma vediamo nel dettaglio gli attori coinvolti:

  • View (visualizza i dati contenuti nel model e raccoglie gli input dell’utente)
  • Model (rappresenta il dominio di busines ed incapsula lo stato dell’applicazione)
  • Presenter (interagisce con il model in base alle richieste ricevute dalla view)
Schema di interazione – MVP Supervising Controller
In questo tipo di implementazione la view conosce il modello e generalemente è connessa ad esso tramite un meccanismo di data binding dichiarativo che permette l’aggiornamento dei dati da visualizzare (in situazioni complesse dove il data bindig dichiarativo non è sufficiente a garantire tale l’aggiornamento è necessario l’intervento del presenter).
  • L’utente interagisce in qualche modo con la View;
  • La View notifica al Presenter dell’interazione;
  • Il Presenter opera sul Model eventualmente modificandone lo stato in rispetto all’interazione notificata dalla View;
  • La View viene aggiornata in base ai nuovi dati esposti dal Model tramite un meccanismo di data binding;
  • Il Presenter, se presenti, aggiorna i dati della view che non possono essere agganciati a quest’ultima tramite data binding dichiarativo;

Schema di interazione – MVP Passive View

In questo caso la view non conosce il modello (non vi è quindi alcuna dipendenza tra la View ed il Modello) ed il presenter è l’unico responsabile dell’aggiornamento dei dati visualizzati.

  • L’utente interagisce in qualche modo con la View;
  • La View notifica al Presenter dell’interazione;
  • Il Presenter opera sul Model eventualmente modificandone lo stato in rispetto all’interazione notificata dalla View;
  • Il Presenter aggiorna la View in base ai nuovi dati esposti dal Model;
Annunci

Un pensiero su “Pattern MVP ed Asp.Net – Prima parte

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...