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.