Ho bisogno di alcuni contro-punti per contrastare l'argomento del perché NON usare M-V-P

6

Ho presentato una demo venerdì prima del fine settimana di vacanza utilizzando il pattern Model-View-Presenter (la versione "Passive View", credo) che voglio mostrare ai miei collaboratori questa settimana come esempio di come progettare l'applicazione WebForms in futuro e ottenere codice pulito e manutenibile. Attualmente manteniamo quasi tutte le logiche al di fuori di alcune routine di accesso ai dati nei file code-behind.

So subito che uno dei punti sollevati sarà che è più veloce / più facile usare semplicemente code-behind piuttosto che creare una libreria di classi separata per le viste e i presentatori, e dover creare un separato vista per pagina (che almeno può diventare pelosa dato che abbiamo ben oltre un centinaio di pagine, anche se a questo punto sto parlando di sviluppo futuro e non di retrofitting del resto del codice). L'argomento sarà che è molto più veloce ottenere un compito facendo qualcosa del genere:

protected void Page_Load(object sender, EventArgs e)
{
    DataSet ds = Customer.Get(Request.QueryString["custid"]);
    if (ds.Tables[0].Rows.Count > 0)
    {
       txtFirstName.Text = ds.Tables[0].Rows[0]["fname"].ToString();
       // other properties here.. 
    }
}

di questo:

// CustomerDetails.aspx
private CustomerDetailsPresenter _presenter;

protected void Page_Load(object sender, EventArgs e)
{
    long customerId = Convert.ToInt64(Request.QueryString["custid"]);
    _presenter = new CustomerDetailsPresenter(this);
    _presenter.Init(customerId);
}

// CustomerDetailsPresenter.cs
class CustomerDetailsPresenter 
{
    private ICustomerDetailsView _view;

    // ctor here...

    public void Init(long customerId);
    {
        // get customer somehow, via ORM or DataSet or whatever...
        _view.FirstName = firstName; // some string, whether from dataset or ORM
    }
}

Quali contro argomenti posso usare per mostrare il vantaggio dell'uso del pattern MVP? In particolare, modierebbe migliorare la velocità e l'efficienza di fare le cose. Dire semplicemente "è più pulito" o "è possibile astrarre correttamente il codice" non è sufficiente perché la qualità del codice non è mai stata un grosso problema, solo la velocità (e ora quella mentalità ci sta mordendo dietro).

NOTA: questo è per le nuove funzionalità di un'applicazione esistente brownfield / legacy, non per un nuovo sito (vorrei scegliere MVC per un sito nuovo di zecca). Le nuove pagine che devono interagire con l'applicazione nel suo insieme, le modifiche radicali alle vecchie pagine e simili sono ciò che normalmente facciamo e di cosa sto parlando usando MVP per.

    
posta Wayne Molina 26.12.2011 - 15:43
fonte

5 risposte

1

I know immediately one of the points raised will be that it's faster/easier to just use code-behind rather than create a separate class library for the views and presenters

Questo argomento può essere sollevato per molte cose.

  • È più veloce iniziare a scrivere codice, invece di spendere più del 50% del tempo necessario per raccogliere i dati, progettare l'architettura del progetto futuro, ecc.

  • È più veloce non applicare le linee guida di stile.

  • È più veloce scrivere codice, invece di scrivere test di codice e .

In tutti i casi, l'argomento non è valido per i progetti di grandi dimensioni. Trascorri meno tempo evitando di scrivere test di unità, poi passi molto più tempo a eseguire il debug, a capire le segnalazioni di bug dei tuoi clienti, ecc.

Se il progetto è veramente piccolo, non utilizzare MVP. La soluzione code-behind sarà più veloce in tutti i casi, senza inconvenienti. Se stai per avviare un sito Web su larga scala con migliaia di righe di codice, non utilizzare MVP perché sarà più veloce all'inizio non è un argomento valido.

    
risposta data 26.12.2011 - 16:10
fonte
2

Se fossi uno dei tuoi collaboratori non sarei contrario all'idea di utilizzare MVP o MVC. Ma vorrei mettere in discussione il modo in cui vuoi realizzarlo. Il modo in cui lo proponi è molto più difficile dell'aggiunta di MVC 3.0 al sito. MVC e WebForms possono essere utilizzati sullo stesso sito Web. Non c'è quasi nessun argomento sul perché farlo in modo manuale come si vuole fare.

Se utilizzi MVC hai argomenti migliori contro è più veloce alla vecchia maniera perché non richiede più tempo di implementazione con MVC. La quantità di codice che devi scrivere è quasi la stessa.

    
risposta data 26.12.2011 - 16:38
fonte
2

Testability wouldn't matter since we have no automated tests at all

Ti ho capito bene: testare tutto manualmente ? E i tuoi colleghi pensano che sia "più veloce / più facile" della scrittura del codice in modo che possa essere facilmente testato automaticamente?

Chiedi ai tuoi colleghi e mostragli quanto suoni assurdi, forse questo è l'argomento che stai cercando.

    
risposta data 03.02.2012 - 13:09
fonte
1

Banalmente, tutto ciò che devi fare è presentare il caso di più pagine. In questo caso, sarà molto più facile refactoring e testare CustomerDetailsPresenter di oltre sei dozzine di copie del suo codice sorgente in sei dozzine di pagine.

    
risposta data 26.12.2011 - 16:03
fonte
0

I pattern sono un modo per risolvere problemi comuni, non ha nulla a che fare con la velocità o l'efficienza. Più precisamente problemi che il languaje stesso può gestire così com'è. Se vuoi velocità, codifica le parti critiche in un'altra lingua, perl è molto veloce, perché alla fine puoi comprare solo più server, cpu o ram, ma se il codice è un casino o difficile da estendere è inutile. Non troverete buoni argomenti contro un determinato modello perché sono indipendenti dal linguaggio. L'unica cosa che posso dirti è che mescolare un pattern con un codice legacy renderà difficile capire a un altro programmatore.

    
risposta data 26.12.2011 - 17:20
fonte

Leggi altre domande sui tag