【发布时间】:2010-03-25 07:13:49
【问题描述】:
我已经阅读了很多关于 MVC/MVP 模式的内容......我有一个简单的问题......如果你有一个包含大量控件的视图......比如说 10 个 texbox 和 10 个复选框......等等等等……我是否应该在我的 IView 界面中指定属性和事件?……
【问题讨论】:
我已经阅读了很多关于 MVC/MVP 模式的内容......我有一个简单的问题......如果你有一个包含大量控件的视图......比如说 10 个 texbox 和 10 个复选框......等等等等……我是否应该在我的 IView 界面中指定属性和事件?……
【问题讨论】:
绝对不是这样。 您的 IView 接口将定义您的业务层可以访问的一组合同/方法(它包括属性)。 在这样的界面中暴露你的控件是完全错误的:
public interface IView
{
TextBox UserNameTextBox{get;set;}
}
您不应该以这种方式定义接口。这真是一个糟糕的编程。 您应该公开一些您的 UI 层将实现的合同。 例如
public interface IView
{
public void SetUserName(string Text);
}
你可以在winform和webform上实现这个接口。
同样,您也不应该在界面(合同)中公开 UI 知识。
让我们假设一个场景,您必须在 UI 上显示 Employee 对象的信息。
您应该通过此接口将 Employee 对象传递给 UI,UI 将负责表示此 Employee 对象的方式。
您的 BL 永远不应该为 n 个文本框和复选框而烦恼。
public class Employee
{
//first name
//last name
//is manager
//is teamleader
//address
}
public interface IEmployeeView
{
void SetEmployee(Employee employee);
}
public partial class EmployeeForm:WinForm,IEmployeeView
{
public void SetEmployee(Employee employee)
{
ENameTextBox.Text = employee.FirstName+" "+employee.LastName;
}
}
【讨论】: