博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

这样设计是MVP模式吗

Posted on 2010-05-15 11:28  轩轩部落  阅读(777)  评论(2编辑  收藏  举报

学习MVP设计模式,看到View层所有的界面控制都在P层实现,View只负责显示,这样做需要把View层的所有的控件事件传递到P层。感觉这样写太复杂,我采用下面的方式实现,不知道这样做是不是符合MVP模式那。

以下是我的例子解释

Form1:View层

IFormView:IView层,里面定义了几个显示View、注入P层对象,返回数据接口函数

FormPresenter:P层,主要功能:注入View对象,处理业务逻辑

BussinessModel:M层,数据访问

下面是三层的结构图:

代码如下:

Form1.cs

Code
1 public partial class Form1 : Form,IFormView
2 {
3
4 private FormPresenter presenter;
5
6
7
8 public Form1()
9 {
10 InitializeComponent();
11 }
12
13 #region IFormView 成员
14
15 public void ShowView()
16 {
17 this.ShowDialog();
18 }
19
20 public void Hello(string str)
21 {
22 this.label1.Text = str;
23 }
24
25 public void SetPresenter(FormPresenter presenter)
26 {
27 this.presenter = presenter;
28 }
29
30 #endregion
31
32
33 private void btnSub_Click(object sender, EventArgs e)
34 {
35 presenter.SetTextInfo(this.textBox1.Text);
36 }
37 }
38
39  

 

 

P层代码:

 

Code
1 public class FormPresenter
2 {
3 private IFormView view;
4 private BussinessModel bmodel = new BussinessModel();
5 public FormPresenter(IFormView view)
6 {
7 this.view = view;
8 }
9
10 public void SetTextInfo(string str)
11 {
12 view.Hello("Hello," + str);
13 }
14 }

IFormView接口代码:

 

1 public interface IFormView
2 {
3 void ShowView();
4 void Hello(string str);
5 void SetPresenter(FormPresenter presenter);
6 }

Program.cs代码

 

Code
1 [STAThread]
2 static void Main()
3 {
4 Application.EnableVisualStyles();
5 Application.SetCompatibleTextRenderingDefault(false);
6
7 IFormView view = new Form1();
8 FormPresenter presenter = new FormPresenter(view);
9 view.SetPresenter(presenter);
10 view.ShowView();
11
12 }

 

 

在Form1.cs内部调用P层的公有方法,处理业务逻辑,P将计算结果通过IFormView提供的接口返回到View层,在View层显示结果。

我在网上看到的标准的MVP实例是不再View层注入P对象的。

不知道以上做法是否符合MVP设计模式那。

请高手给解答一下!

例子源代码下载