我是MVP模式的初学者,只想了解以下案例的最佳做法。
为了更好地理解,我将通过示例提出问题。比方说,我们有一个表格EmployeeView
,EmployeePresenter
,EmployeeModel
和DataService
它封装类的GetEmployeeByID()
方法。对于此演示,我使用具体的类。
假设现在在Win Forms应用程序中ID
,我们ID
要按来搜索员工,因此我们进入视图并按“搜索”按钮。在这种情况下,Presenter
将更新EmployeeModel
可能使用的反射。(目前只有' EmployeeModel.ID
'属性具有数据)。然后Presenter
会说话的DataService
。这可以通过两种方式完成
Model
给DataService
,然后它将更新相同的模型并返回Presenter
。class EmployeePresenter {
private void SearchEmployee (Object sender, EventArgs e)
{
SearchEmployee();
}
private void SearchEmployee()
{
var EmployeeModel = DataService.GetEmployeeByID(EmployeeMode);
base.SetViewPropertiesFromModel(EmployeeModel);
}
}
DataService类{
public EmployeeModel GetEmployeeByID(EmployeeModel employee)
{
//Database code here
employee.Name= (string) dataReader["name"];
.
.
.
return employee;
}
}
Model
然后DataService
将创建Model
并返回Presenter
。class EmployeePresenter {
private void SearchEmployee (Object sender, EventArgs e)
{
SearchEmployee();
}
private void SearchEmployee()
{
var EmployeeModel = DataService.GetEmployeeByID(EmployeeMode.ID);
Base.SetViewPropertiesFromModel(EmployeeModel);
}
}
DataService类{
public EmployeeModel GetEmployeeByID (string employeeID)
{
//Database code here
return new BankAccount
{
EmployeeName = (string) dataReader["name"],
.
.
. };
}
}
EmployeeSalary
?如果它有两个模型,我们需要两个演示者吗?DataService
总是返回一种商业模式吗?不能DataService
返回stings
还是DataSets
要退税?_view.EmployeeName=EmployeeModel.Name;
吗?第二种选择会更好,因为调用您的方法时GetEmployeeByID
,期望参数Id
不是整个模型更合乎逻辑。
与ASP.NET MVC不同,这里不需要将模型作为传递给视图的单个类,因此可以保留2个模型以获得更好的语义结构。
这取决于您要实现的目标。同样,如果调用GetEmployeeByID
了您的方法,则该方法将返回类型为的业务模型Employee
。您的服务可以返回“字符串或数据集”,但这意味着您需要在Presenter中进行其他映射才能将数据集映射到模型。
是的,演示者可以设置这样的值,_view.EmployeeName=EmployeeModel.Name
您将需要实现set
access的访问修饰符_view.EmployeeName
以在某些控件中呈现文本
public EmployeeName
{
set
{
// Label Control
this.lblEmployeeName.Text = value;
}
}
在某些情况下,尽管设置值很低,但演示者只是使其变得更加复杂而没有任何特殊的好处。在这些情况下,您可以使用Supervising Controller,它是MVP的子类型,其中与业务逻辑无关的一些基本呈现保留在View中,而更复杂的逻辑在Presenter / Controller中完成。您可以在此处找到有关它的信息:
http://martinfowler.com/eaaDev/SupervisingPresenter.html
还有另一个称为“被动视图”的子类型,其中该视图仅包含控件,而Presenter负责将值传递给该视图。你可以在这里读到它:
http://martinfowler.com/eaaDev/PassiveScreen.html
编辑:您也可以看一下这个答案,以简要了解两个子类型:什么是MVP-Passive View和MVP-Supervising控制器
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句