标签:
MVP:界面与业务逻辑分离在Winform中的应用
MVP,Model-View-Presenter的缩写。
在MSDN上,下载了一个示例,http://www.microsoft.com/china/msdn/library/architecture/architecture/architecturetopic/MVP.mspx?mfr=true
采用的实现结构
在Blog http://www.agilelabs.cn/blogs/wind_tower/archive/2006/01/26/626.aspx上,看到的实现结构
在C# 开发环境中,为了提高界面的开发效率,可采用数据绑定的形式。这样,View中需要提供数据源,采用MSDN上定义的结构,实现起来更加方便一些。
同时,为了提高对客户请求的响应,采用多线程。由于View中的数据绑定与Presenter中多线程的业务逻辑,需要同时访问View中的数据源,这样,对于一些特定的多线程处理需求,还需要Presenter提供刷新View的Public函数,并不能完全实现:Presenter业务逻辑更新后,View可以自动刷新
=====================================================
以前写winform项目都是界面与实现逻辑都放在一起,自从学了mvc3之后,又看了wpf的mvvp后,觉得winform的程序可以这样来写。
首先定义视图接口:
public interface IView<T> where T:class
{
T Model { get; set; }
void BindingData(T model);
}
然后定义Presenter接口:
/// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
public interface IPresention<T> where T : class
{
void InsertData(T model);
void UpdateData(T model);
void DeleteData(T model);
}
实现IPresention<T>接口的类:
public class DataDictPresentation : IPresention<ResourceDict>
{
IView<ResourceDict> _view;
IView<IList<ResourceDict>> _viewList;
public DataDictPresentation(IView<ResourceDict> view)
{
_view = view;
if (_view.Model != null)
{
_view.BindingData(_view.Model);
}
}
public DataDictPresentation(IView<IList<ResourceDict>> view)
{
_viewList = view;
PageIndex = 1;
PageSize = 14;
}
public int PageIndex { get; set; }
public int PageCount { get; set; }
public int PageSize { get; set; }
public void InsertData(ResourceDict model)
{
}
public void UpdateData(ResourceDict model)
{
}
public void Query(ResourceDict filter)
{
}
public void DeleteData(ResourceDict model)
{
}
}
最后在窗体页面上实现:
public partial class DataDictBox : Form, IView<ResourceDict>
{
private DataDictPresentation presentation;
public DataDictBox()
{
InitializeComponent();
Initialize();
}
private static DataDictBox _instance;
public static DataDictBox Instance
{
get
{
if (_instance == null ||
_instance.IsDisposed)
{
_instance = new DataDictBox();
}
return _instance;
}
}
private void Initialize()
{
this.Load += delegate
{
presentation = new DataDictPresentation(this);
};
}
public ResourceDict Model { get; set; }
public void BindingData(ResourceDict item)
{
}
public void SetData(ResourceDict item)
{
}
这样完成了一个初步的MVP结构的模型。
标签:
原文地址:http://www.cnblogs.com/qq260250932/p/4238541.html