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!
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]} JoshWarning: 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.
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