Pattern MVP, MVC: mito o realtà?… vediamo un caso reale

Tutti non fanno che parlare di questi pattern come se fossero la panacea di tutti i mali.

Molti si sentono dei guru spiegando questi pattern, ma dai risultati che si ottengono mi viene da chiedere: ma li hanno mai applicati a dei grandi progetti, realmente?

Anche perché non ho mai sentito parlare di quantità, cioè quanta parte del codice è realmente riutilizzabile.

 

Sono arrivato al 90% di una applicazione stand-alone basata solo in minima parte su database, ma centrata su elaborazioni e calcoli, realizzata in C# per .NET 2.0.

Visto che si parla già da tempo di .NET 3.0 e 3.5 o voluto seguire i consigli degli “esperti” e utilizzare i pattern MVC e MVP (a seconda delle form) in modo da poter passare da un’interfaccia WinForm a una WPF nel modo più indolore possibile.

 

Da bravo… architetto / progettista / sviluppatore , ho preso la mia applicazione e l’ho fatta analizzare da uno dei programmi in circolazione (Source Monitor vers. 2.3.6.1) per ottenere le metriche del codice.

 

Dei risultati ottenuti, riporto i seguenti:

 

UI

Core

Totali

Files

335

525

860

Lines

47.746

51.120

98.866

Lines %

48

52

100

Legenda:

·         UI            : View + Controller + Application;

·         Core        : Model + tutte le altre classi indipendenti dalla UI.

 

Dall’esperienza si evince che il “Controller” essendo vicino alla “View” ne è dipendente, cioè cambiando la View deve cambiare il Controller. Inutile farsi false illusioni, le UI sono così diverse le une dalle altre che se si vogliono sfruttare a pieno il Controller deve essere realizzato specifico per quella View (UI). Si osservino tutti i casi in cui si è cercato di riutilizzare il Controller (vedi: NSK) l’interfaccia risulta molto scarna (essenziale).

 

Da questi risultati si evince che metà del codice deve essere riscritto per passare da WinForm a WPF.

A cosa sono serviti i Pattern MVP, MVC ?

 

Vediamo gli aspetti negativi e positivi dei pattern in questione.

Negativi

1)       se il fine è quello di riutilizzare quanto più codice possibile passando da un tipo di User Interface a un’altra (es. da WinForm  a WPF); conviene dividere il codice in due parti (invece che in tre): uno dipendente dall’interfaccia grafica (View) e l’altro indipendente (Model). Il Controller (nell’MVC) può benissimo essere integrato nella View. Si eviteranno molte complicazioni.

2)        L’architettura del codice è più complessa e la quantità di codice da scrivere aumenta! Quando il nostro fine era proprio quello di riutilizzarlo per scriverne di meno!

3)       Alcuni dicono che si devono utilizzare questi pattern in modo che si possa testare la UI, ma siamo quasi all’assurdo! Il codice da scrivere per poter fare un test è così tanto che è molto più probabile che l’errore si trovi nel codice con cui si vuole testare piuttosto che in quello che si testa. Più semplice è utilizzare manualmente un debugger e si risparmia tempo e si evitano falsi allarmi di bug inesistenti dovuti al codice di test errato.

 

Positivi

1)       I Controller possono essere organizzati in una gerarchia e quindi, una parte comune (classe base) può essere riutilizzata in altri Controller, avendo così la gestione dell’interazione riutilizzabile all’interno dello stesso progetto. Questo permette anche una gestione più standard e diminuiscono notevolmente il numero di bug dovuti alla gestione delle View.

2)       Il 5% del codice dei Controller (quello delle classi base) può essere riutilizzato quando si cambia la UI.

 

In questo mio progetto, anche una parte del Model non è riutilizzabile cambiando interfaccia grafica; questo ha fatto si che il Model l’ho dovuto dividere in due parti, uno dipendente dalla UI e l’altro indipendente.

Questo capita nei progetti che non sono solo un trasferimento di dati da e vero un database, ma svolgono anche elaborazioni complesse da un punto di vista grafico.

Print | posted @ giovedì 13 dicembre 2007 22.01

Comments on this entry:

Gravatar # Re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Roberto Messora at 13/12/2007 22.50

Stai sbagliando completamente target...
i pattern mvc e mvp _NON_ servono a diminuire il codice scritto (anzi nell'mvp se ne scrive in genere di più), servono principalmente a rendere testabili in isolamento (usando la tecnica del mocking) sia le view che i controller/presenter (separation of concerns).
e ricordo che un parametro fondamentale che misura la qualità di un'applicazione è il grado di testing che le si è applicato.
inoltre il passaggio da un engine di view all'altro (da winform a wpf) diventa una riscrittura di view e controller/presenter se ovviamente non si pensa ad una equivalenza nella struttura e nei compiti delle varie view.
ovviamente se hai una view customer winform che è sostanzialmente diversa dalla view customer wpf, è automatico che si debba cambiare le interfacce. ma questo tipo di approccio è a mio avviso sbagliato progettualmente, proprio perchè non si stanno semplicemente sotituendo gli engine delle view, ma si stanno proprio modificando le funzionalità di interazione uomo-macchina delle stesse. in pratica stai facendo due applicazioni diverse.
per concludere: le architetture _NON_ sono fatte per diminuire la complessità, bensì per gestirla meglio, sono due concetti ben diversi.
scrivere meno codice non è mai significato diminuire la complessità di un sistema software.
saluti
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by raffaeu at 13/12/2007 23.01

Io parlo solamente in merito al pattern MPV. E' vero che scrivi piu' codice (non ho mai letto che i pattterns lo facciano diminuire) ma oltre a garantirti una firma ed un controllo su quello che scrivi. Poi io personalmente come in NSK associo una View (Interfaccia) al presenter e quando passo da Web a WindowsForm riscrivo solo il presenter, ma mi sembra moooolto logico.
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Giancarlo Sudano at 13/12/2007 23.38

"Tutti" ne parlano magari perchè vengono applicati da più di 20 anni visto che la prima definizione di MVC è del '79.
E se c'è gente che li usa con successo da 20 anni, magari chiedi proprio a loro quali siano i veri principi. E magari ti risponderanno che lo scopo non è diminuire la complessità o il numero di linee di codice, ma gestire la scalabilità verso applicazioni con complessità crescente, o aumentare la testabilità dei componenti.

Sul testing capisco inoltre da quello che dici che non hai mai lavorato su progetti dove è richiesta qualità di prodotto, misurazione e controllo della riattivazione, catene di test funzionali automatizzate (altro che unit test).

Ma se non è una tua realtà, non dovresti generalizzare con affermazioni tipo "meglio il debugger" che con il test automatico centra veramente poco.
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Matteo Baglini at 13/12/2007 23.49

Come ti ha già detto Roberto questi pattern servono ad isolare i vari componenti per renderli testabili. La possibilità di passare da un toolkit grafico ad un'altro è un *possibile* vantaggio, però per sfatare questo mito basta prendere il SupervisingController (variante dell' MVP) il quale usa il DataBindig, bene da sempre i meccanismi di binding sono una funzionalità strettamente legata al toolkit grafico (WebForm/WinForm/WPF). Alla fine applicare MVC/MVP vuol dire introdurre dei layer di astrazione verso lo strato di presentazione e come dice sempre janky l'astrazione costa, quindi è normale che le linee di codice e la complessità aumentino. Comunque ti consiglio di applicare anche altre metriche oltre al numero di linee di codice che di per se non "dice" molto. In fine ricordati, non esiste una panacea di tutti i mali, la risposta giusta è sempre: dipende!
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Andrea Saltarello at 14/12/2007 0.04

"Tutti"? Davvero? Strano: proprio ieri io e Janky (che "guru" nè siamo nè ci sentiamo) durante la nostra sessione abbiamo detto/sostenuto/ripetuto/ribadito che:
1) questi pattern nascono per organizzare la SoC
2) applicarli richiede (almeno) un "movente"
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Tommaso Caldarola at 14/12/2007 1.01

Un post qualunquista direi...
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Alessandro Pulvirenti at 14/12/2007 3.15

Rispondo qui un po’ a tutti.

E’ vero che, se l’unico interesse è quello di poter sostituire un’interfaccia, WinForm con una WPF, non è “necessario” utilizzare i pattern MVC, MVP; perché così si sbaglierebbe “target” come dicono in un modo o in un altro alcuni. Infatti basterebbe solo dividere logicamente l’applicazione in due parti: quella dipendente e quella indipendente dalla UI.

E’ vero che in alcuni contesti è importante avere delle catene di test automatizzate (basta solo pensare a quanti test deve superare una nuova CPU prima di poter entrare nel mercato), ma in questo caso io sto parlando di una applicazione, in cui lo scopo principale per utilizzare i suddetti pattern, era quello di poter sostituire facilmente (scrivendo poco codice) l’interfaccia grafica.

Da tutto questo si deduce, che i pattern MVC, MVP, … si applicano proficuamente in una percentuale bassa (non so quanto, diciamo il 5%) dei progetti software, e questo dovrebbe essere ribadito ogni volta che se ne parla (per chi non l’ha fatto).
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Zio at 14/12/2007 3.17

lo so che suona cattivo ma da questo si deduce solo che non hai chiaro a cosa serve il pattern e cerchi di usarlo per risolvere un problema diverso da quello che risolve.

A sentire la maggioranza delle persone si applicano proficuamente al 95% di progetti software, bisogna solo sapere a cosa serve...
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Nicolò Carandini at 14/12/2007 17.49

Ciao Alex,
come neo blogger hai già sollevato un bel vespaio! Io nello specifico non ho nulla da dire, ma mi piace il tema che hai sollevato e forse capisco che ve n'è uno sottostante, più rivolto a quelli che si definiscono (come tu fai) "architetto / progettista / sviluppatore": Ma tutti questi layers, astrazioni, TDD, ecc. ecc. sono davvero per tutti o per lo sviluppatore "uno e trino", che fa tutto da solo sono troppo "pesanti" ?
La risposta, e qui mi associo, è: dipende!
Concludo con un incoraggiamento ed una esortazione: continua così, ma non chiuderti mai a riccio rimanendo nelle tue convinzioni. Il muro di UgiDotNet è stupendo, e anche se un po' rude, è fatto di gente che di sviluppo se ne inende davvero. E che merita tutto il rispetto e l'attenzione anche quando ti "stronca".
Buon lavoro e buoni blogs.
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Alessandro Pulvirenti at 15/12/2007 0.53

Ho visto persone che si definiscono architetti, (salvo poi smentire) che invece sanno solo parlare o dire agli altri quello che devono fare.

Costoro, quando si sono trovati a sviluppare qualcosa, non hanno messo in pratica niente di quello che dicevano, perché si sono accorti che, se le cose si fanno, come la loro Teoria dice che si dovrebbero fare, servirebbe il doppio delle persone, il doppio del tempo, il doppio delle capacità che in pratica un altro progetto uguale richiederebbe.

Quindi, spesso sono solo parole al vento, solo alcuni progetti particolari (NASA, medicina, CPU, ...) richiedono una qualità elevata, costi quel che costi!

Certo non dico che si deve fare come una persona che mi diceva, che la sua azienda aveva sviluppato un software per i notai, che aveva successo in tutta Italia, era scritto in VB 6 perché, loro, non ne capivano niente di programmazione ad oggetti!!!

Infatti, come dici anche tu, tutto dipende!

E’ giusto parlare di come si debbono sviluppare progetti in cui si richiede la massima qualità, ma è anche giusto spiegare come fare negli altri progetti, in cui le risorse a disposizione non sono infinite!

Se avessi seguito la teoria (MSF, …), in un mio vecchio progetto di 200.000 righe di codice in C++, avrei dovuto impiegare almeno una decine di persone, per un tempo molto superiore a quello che ho impiegato io! Non dico che io sono speciale, ma che la teoria si deve saper applicare.

Non penso di avere la verità assoluta e non mi voglio chiudere a riccio, infatti sono sempre disponibile a imparare dagli altri, a rimettere in discussione le tecnologie che utilizzo e ad ammettere daver sbagliato!

Sono il primo che, quando c’è una tecnologia nuova, prende il libro e parte dalla prima pagina, anche dalle cose più semplici, con umiltà… penso che anche nelle cose semplici, ci può essere qualcuno che mi possa insegnare qualcosa che può migliorare la qualità del mio codice.

In dei webcast / seminari, sento parlare, come se fosse l’ultimo ritrovato della tecnologia, che: è il Domain model che deve guidare lo sviluppo di un software.

Mi chiedo?... ma quando mai è stato il contrario?!

Solo i ragazzini alle prime armi si mettono davanti a un computer e iniziano a disegnare le
interfacce e in un secondo momento, fanno il domain model, possibilmente pure tutto integrato con le finestre!

Quando questi esperti parlano in pubblico, pensano di parlare a dei principianti?
Uh… forse ho sbagliato a seguire qualche web cast… lo ammetto!
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Lorenzo Barbieri at 15/12/2007 9.53

"Se avessi seguito la teoria (MSF, …), in un mio vecchio progetto di 200.000 righe di codice in C++, avrei dovuto impiegare almeno una decine di persone, per un tempo molto superiore a quello che ho impiegato io! Non dico che io sono speciale, ma che la teoria si deve saper applicare."

Probabilmente le cose sono due:
- non avevi bisogno di MSF
- non conosci MSF

Per quanto riguarda il resto, la contrapposizione non è Domain Model vs UI, ma Domain Model vs Database Model...

Se non ti è piaciuto qualche webcast, e vuoi essere utile e concreto fai nomi e cognomi, così l'interessato (o gli interessati) possono rispondere a dovere, e gli altri possono capire con chi te la stai prendendo, valutare te, valutare lui (o loro) e trarre le proprie conclusioni.
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Alessandro Pulvirenti at 15/12/2007 19.53

Rispondo a Lorenzo:
le cose non sono due, ma tre!
Cioè, le risorse erano una persona sola, "Io". Quindi tutto si organizzava di conseguenza.

Per quanto riguarda il Domain Model; avevo letto di una persona che rispondendo a un newsgroup diceva d'iniziare a sviluppare dall'interaccia grafica e non dal Domain model, e io, ho sbagliato a generalizzare; quando, invece, come dici tu, la contrapposizione è un'altra: tra domain model e Database model.

Per quanto riguarda i webcast, dico soltanto che, le competenze non sono tutte uguali, di chi li fa (ho scoperto l'acqua calda!), ma sono da ammirare le persone che cercano di portare il proprio contributo.

Ho alzato un poco i toni, solo per far scendere dalle nuvole qualcuno che si era montato la testa.

Senza rancore per nessuno.
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by Lorenzo Barbieri at 15/12/2007 20.04

Se sei da solo NESSUNA metodologia va bene.
Però MSF contiene tantissime cose che puoi usare tranquillamente da solo (build automatiche, gestione dei rischi, enfasi sulla user experience, enfasi sui rilasci, etc...).
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by kraloyun at 31/05/2008 6.34

kraloyun
kral oyun
oyun
oyunlar
kraloyun
kral oyun
oyun
oyunlar
blog
blogcu
kido
azbuz
facebook
arkadaş
flash games
fotoput
youtubeaswert
  
Gravatar # re: Pattern MVP, MVC: mito o realtà?… vediamo un caso reale
by ANONIMO at 05/03/2010 22.37

Discutere con nerd webacaster è come discutere di religone con un talebano. io non concepisco tutti sti discorsi. Mi bevo due birre alla facciazza vostra e domani arrivo in ufficio bello cotto a ridere del mio collega che per la metà del mio stipendio si fa tutte ste seghe mentali.
  
Gravatar # 14
by picksuperbowl at 16/04/2010 2.30

<h1>Kobe 4, Kobe 4<br>
nike kobe 5, nike kobe 5<br>
Denver Broncos jerseys, Denver Broncos jerseys<br>
Detroit Lions jerseys, Detroit Lions jerseys<br></h1>
  

Your comment:

Title:
Name:
Email:
Website:
 
Italic Underline Blockquote Hyperlink
 
 
Please add 4 and 5 and type the answer here: