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>

 

 

La conoscenza è alla base della verità

Sottotitolo: Se sei ben informato puoi capire chi sta dicendo cose non vere.

Se qualcuno legge SOLO l'articolo di repubblica.it in merito al black-out di

skype dei giorni scorsi sicuramente punta il dito contro microsoft e sulla sua politica di distribuzione degli aggiornamenti. Se invece come consigliato da Luca e Andrea non ci fermiamo solo a repubblica ma magari leggiamo il blog ufficiale di skype sia in inglese, sia in italiano , possiamo capire bene che quello scritto sul repubblica ahimè non corrisponde a verità.

Ovviamente quoto in pieno Andrea quando dice:

La smentita, che tipicamente NON fa notizia, non l'avremo mai...

 

Technorati tags: ,