码迷,mamicode.com
首页 > 其他好文 > 详细

MVP设计模式的实现

时间:2015-01-21 13:11:40      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

技术分享 

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 MVP实现

 

以前写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结构的模型。

 

MVP设计模式的实现

标签:

原文地址:http://www.cnblogs.com/qq260250932/p/4238541.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!