Pattern MVP: usare una classe base per ottimizzare i Presenter

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:

  1. riceve riferimento ad un'instanza della view 
  2. controlla che la view non sia null
  3. riceve riferimento ad un'instanza del model
  4. 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>

 

 

posted @ venerdì 24 agosto 2007 22:09

Print

Comments on this entry:

# Pattern MVP: usare una classe base per ottimizzare il test dei Presenter

Left by makka at 10/10/2007 19:36
Gravatar
In questo ultimo periodo ho usato molto il pattern ModelViewPresenter .&#160;Per scrivere&#160;le&#160;mie triadi MVP
Comments have been closed on this topic.