Al Techd c'è stata una sola sessione del nuovo framework MVC basato su ASP.NET, e va bene anche così poichè è ancora in una forma embrionale. Tante altre sessioni invece sulla Web Client Software Factory che implementa sotto sotto un semplice ma efficace MVP. Vediamo di fare un po il punto della situazione, perchè la confusione è tanta.
La scelta di adottare un pattern architetturale piuttosto che un altro sul layer di presentation deve nascere sempre da una motivazione. Alcune settimane fa ho tenuto un corso di architetture sul web in cui facevo considerazioni simili, ne faccio qui un'estratto
Testabilità: Bisogna preparare dei test per tenere sotto controllo la regressione e l'evoluzione del nostro progetto. Isolare e riprodurre il comportamento di una pagina con l'infrastruttura delle webform non è per niente facile.
Scalabilità: Gli accessi al nostro progetto sono così alti che la pesantezza dell'infrastruttura delle webform e del viewstate sono improponibili.
Complessità: Numerose pagine, flussi tra le pagine molto complesse, necessità di modularizzare l'applicazione
Se qualcuno di voi scegliesse di adottare MVC/MVP per moda sta sbagliando alla grande.
Avete forti problemi di scalabilità dell'infrastruttura?
OK, potete cominciare a lavorare con un MVC come MonoRail o aspettare il nuovo MVC del Framework (che potrà utilizzare i vari motori di Engine anche del primo). L'uso di un framework è necessario in questo caso, per smontare il ciclo attuale della page e dei controlli di WebForm e affidarsi ad un modello con separazioni delle responsabilità più netta.
Il vostro problema è il testing?
OK, magari potete non preoccuparvi di forte scalabilità, e allora il modello MVP potrebbe andar bene. Non abbiamo bisogno di un framework vero e proprio, l'infrastruttura delle WebForm può essere sfruttata, ma facendo in modo che ogni View implementi una interfaccia in modo da poterla isolare. Farsi un MVP a casa propria non è poi così tremendo.
Oltre alla testabilità, si ha a che fare con complessità dell'applicazione sempre crescente?
OK...usate la Web Client Software Factory. Oltre ad un modello View-Presenter sulle viste per l'isolamento della logica, offre supporto alla modularizzazione dell'applicazione (evoluzione, versionamento e deploy indipendente di moduli di business), e soprattutto la possibilità di usare come application controller un vero e proprio State Machine Workflow tramite Workflow Foundation. Questa è una soluzione che io propongo di solito sulle applicazioni intranet.