学习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设计模式那。
请高手给解答一下!