winform的MVP框架

我正在一个新项目工作,我想实现MVP模式。 有一个使用这种模式的winforms框架? 我检查了CAB,但我的项目实现起来并不复杂,我搜索更简单的实现和使用。

谢谢!

如果你正在寻找简单的东西… 那么你真的不需要一个框架 。 你可以推出自己的MVP模式。

编写基类只需几分钟。

//Base Presenter Class public class Presenter 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; } 

这就是你开始所需要的一切。 然后,您可以定义新视图以满足您的需求。

 public interface IPersonView : IView { String PersonName { get; set; } DateTime? DOB { get; set; } event EventHandler SavePerson; } 

创建使用该视图的演示者。

 public class PersonPresenter : Presenter { 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); } } 

最后以新的forms使用它。

 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); } } } 

我非常喜欢Jeremy Miller的东西。 我使用过智能客户端软件工厂……但这些都是为了解决非常复杂的问题。 混合了许多其他模式,它开始掩盖了MVP模式的简单性。

从简单开始,当您开始陷入困境时,您就可以开始添加服务定位器和事件聚合器等内容。

MVP模式实现起来非常简单。 我希望这可以帮助您更快地开始运行。

干杯,
玩笑

这不是一个框架,但在你决定你的设计之前,我会阅读Jeremy Miller的Build Your Own Cab系列。 他介绍了WinForms中的各种表示模式。