MVP Framework dla winforms

Pracuję w nowym projekcie i chcę zaimplementować wzorzec MVP. Czy istnieje framework dla winforms, który używa tego wzorca? Sprawdziłem CAB, ale mój projekt nie jest skomplikowany w realizacji, szukam czegoś prostszego do wdrożenia i użycia.

Dzięki!

Author: fcartu, 2011-07-29

2 answers

Jeśli szukasz czegoś prostego... wtedy naprawdę nie potrzebujesz frameworka . Możesz rzucić swój własny wzór MVP.

Pisanie klas bazowych zajmuje tylko kilka minut.

//Base Presenter Class  
public class Presenter<TView> where TView : class, IView {
   public TView View { get; private set; }

   public Presenter(TView view) {
      if (view == null)
         throw new ArgumentNullException("view");

      View = view;
      View.Initialize += OnViewInitialize;
      View.Load += OnViewLoad;
   }

   protected virtual void OnViewInitialize(object sender, EventArgs e) { }

   protected virtual void OnViewLoad(object sender, EventArgs e) { }
}

//Base View  
public interface IView {
   event EventHandler Initialize;
   event EventHandler Load;
}
To wszystko, czego potrzebujesz, aby zacząć. Następnie można zdefiniować nowy widok w zależności od potrzeb.
public interface IPersonView : IView {
   String PersonName { get; set; }
   DateTime? DOB { get; set; }

   event EventHandler SavePerson;
}

Utwórz prezenter, który używa widoku.

public class PersonPresenter : Presenter<IPersonView> {
   private IPersonDb PersonDB { get; set; }

   public PersonPresenter(IPersonView view, IPersonDb personDB)
      : base(view) {
      if (personDB == null)
         throw new ArgumentNullException("personDB");

      PersonDB = personDB;
   }

   protected override void OnViewInitialize(object sender, EventArgs e) {
      base.OnViewInitialize(sender, e);

      View.PersonName = "Enter Name";
      View.DOB = null;

      View.SavePerson += View_SavePerson;
   }

   void View_SavePerson(object sender, EventArgs e) {
      PersonDB.SavePerson(View.PersonName, View.DOB);
   }
}

I wreszcie wprowadzić go do użytku w nowej formie.

public partial class Form1 : Form, IPersonView {
   private PersonPresenter Presenter { get; set; }

   public Form1() {
      Presenter = new PersonPresenter(this, new PersonDb());

      InitializeComponent();

      InvokeInitialize(new EventArgs());
   }

   public string PersonName {
      get { return tbName.Text; }
      set { tbName.Text = value; }
   }

   public DateTime? DOB {
      get {
         return String.IsNullOrWhiteSpace(tbDOB.Text) ?
                  (DateTime?) null :
                  DateTime.Parse(tbDOB.Text);
      }
      set {
         tbDOB.Text = String.Format("{0}", value);
      }
   }

   public event EventHandler Initialize;

   public void InvokeInitialize(EventArgs e) {
      EventHandler handler = Initialize;
      if (handler != null) {
         handler(this, e);
      }
   }

   public event EventHandler SavePerson;

   public void InvokeSavePerson(EventArgs e) {
      EventHandler handler = SavePerson;
      if (handler != null) {
         handler(this, e);
      }
   }
}
Bardzo lubię rzeczy Jeremy ' ego Millera. I użyłem Fabryka Oprogramowania Smart Client... ale chodzi o rozwiązywanie bardzo dużych skomplikowanych problemów. Jest tak wiele innych mieszanych wzorów, że przyćmiewa to prostotę wzorca MVP.

Zacznij prosto i jak zaczniesz biegać w trudnych miejscach, wtedy możesz zacząć dodawać rzeczy takie jak Lokalizatory usług i agregatory zdarzeń.

Wzór MVP jest naprawdę bardzo trywialny do wdrożenia. Mam nadzieję, że to pomoże Ci zacząć biegać więcej szybko.

Pozdrawiam, [23]} Josh
 36
Author: Josh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-29 14:51:31

To nie jest framework, ale przeczytałbym serię Jeremy ' ego Millera Zbuduj własną kabinę zanim zdecydujesz się na swój projekt. Omawia różne wzory prezentacji w WinForms.

 4
Author: Eric Farr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-29 14:02:01