C# 复杂的用户界面->;MVC模式

C# 复杂的用户界面->;MVC模式,c#,model-view-controller,C#,Model View Controller,我读了很多关于MVC/MVP模式的书。。。。我有一个简单的问题…如果你有一个包含大量控件的视图…比如说10个文本框和10个复选框…等等。。。我是否需要在IView界面中指定每个属性和事件?…绝对不是这样。 IView接口将定义一组可由业务层访问的契约/方法(包括属性)。 在这样的界面中暴露控件是完全错误的: public interface IView { TextBox UserNameTextBox{get;set;} } 您不应该以这种方式定义接口。这真是一个糟糕的编程。 您应该公

我读了很多关于MVC/MVP模式的书。。。。我有一个简单的问题…如果你有一个包含大量控件的视图…比如说10个文本框和10个复选框…等等。。。我是否需要在IView界面中指定每个属性和事件?…

绝对不是这样。 IView接口将定义一组可由业务层访问的契约/方法(包括属性)。 在这样的界面中暴露控件是完全错误的:


public interface IView
{
  TextBox UserNameTextBox{get;set;}
}
您不应该以这种方式定义接口。这真是一个糟糕的编程。 您应该公开一些UI层将实现的契约。 例如

您可以在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;
  } 

}

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;
  } 

}