In questo periodo ho scritto molto codice che usa il pattern MVP ed ho notato che il costruttore di un presenter fa bene o male fa quattro operazioni fondamentali:
- riceve riferimento ad un'instanza della view
- controlla che la view non sia null
- riceve riferimento ad un'instanza del model
- controlla che il model non sia null
Con una sintassi simile a questa:
public class MyPresenter
{
private readonly IMyModel _model;
private readonly IMyView _view;
public MyPresenter(IMyView view,IMyModel model)
{
if (view ==null)
throw new ArgumentNullException("view");
if (model ==null)
throw new ArgumentNullException("model");
_model = model;
_view = view;
}
}/p>
In un progetto mediamente complesso capita di riscrivere parecchie volte lo stesso codice. E' questo male! Questa la soluzione che ho trovato per aggirare il problema.
Si parte isolando il codice in una classe astratta che usa una View e un Model generico
public abstract class Presenter<V, M>
{
private readonly M _model;
private readonly V _view;
protected V View
{
get {return _view; }
}
protected M Model {get {return _model; }
}
public Presenter(V view, M model)
{
if (view ==null)
throw new ArgumentNullException("view");
if (model ==null)
throw new ArgumentNullException("model");
_model = model;
_view = view;
}
}
e quindi i presenter concreti diventano molto più semplici riulizzando più volte il medesimo pezzo di codice
public class MyPresenter : Presenter<IMyView,IMyModel>
{
public MyPresenter(IMyView view, IMyModel model)
: base(view, model)
{
}
}
public class MyPresenter2 :Presenter<IMyView2,IMyModel2>
{
public MyPresenter2(IMyView2 view,IMyModel2 model)
:base(view, model)
{
}
}
p>