Search code examples
c#javadesign-patternsmvp

What rules do you use to delineate MVP methods and members


When using the MVP pattern, I often come across methods and members which don't seem to fall nicely within the View or Presenter classes...My question is: What rules do you use to decide what functionality lies which classes? I am relatively new to MVP, so please humour me.

TIA.


Solution

  • I tend to favor the Passive View variant of MVP so this is a non issue for me. In passive view pattern the View pretty much delegates anything more complex than a simple assignment to the presenter.

    You wind up with a pattern that looks like this:

    public class MyView: IView
    {
        private MyPresenter Presenter;
    
        private OnEvent()
        {
            Presenter.DoSomething();
        }
    
        public string MyProperty
        {
            get{ return UIControl.Property;}
            set{ UIControl.Property = value}
        }
    }
    
    public interface IView
    {
        public string MyProperty{ get; set;}
    }
    
    public class MyPresenter
    {
        private IView view;
    
        public void DoSomething()
        {
            ...
            view.MyProperty = something;   
        }
    }
    

    The only trick part is if you have a datagrid on your form. These require a lot of work to fit into a Passive View pattern.