如何在MVP中的演示者和数据服务之间传输数据

电脑辅助设计

我是MVP模式的初学者,只想了解以下案例的最佳做法。

为了更好地理解,我将通过示例提出问题。比方说,我们有一个表格EmployeeViewEmployeePresenterEmployeeModelDataService它封装类的GetEmployeeByID()方法。对于此演示,我使用具体的类。

假设现在在Win Forms应用程序中ID,我们ID要按来搜索员工,因此我们进入视图并按“搜索”按钮。在这种情况下,Presenter将更新EmployeeModel可能使用的反射。(目前只有' EmployeeModel.ID'属性具有数据)。然后Presenter会说话的DataService这可以通过两种方式完成

  1. 在这里,我们将传递ModelDataService,然后它将更新相同的模型并返回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;

}

}

  1. 在这里,我们仅传递的属性值,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"],
     .
     .
     . };
}

}

  1. 以上哪一项是可以接受的?
  2. 例如,如果在单个视图上显示两个实体(例如,雇员和薪水实体)的详细信息,我们是否将这些实体视为两个模型或单个模型,例如EmployeeSalary如果它有两个模型,我们需要两个演示者吗?
  3. 应该DataService总是返回一种商业模式吗?不能DataService返回stings还是DataSets要退税?
  4. 演示者可以在视图上设置值_view.EmployeeName=EmployeeModel.Name;吗?
阿德里安·赫里斯托夫(Adrian Hristov)
  1. 第二种选择会更好,因为调用您的方法时GetEmployeeByID,期望参数Id不是整个模型更合乎逻辑

  2. 与ASP.NET MVC不同,这里不需要将模型作为传递给视图的单个类,因此可以保留2个模型以获得更好的语义结构。

  3. 这取决于您要实现的目标。同样,如果调用GetEmployeeByID您的方法,则该方法将返回类型为的业务模型Employee您的服务可以返回“字符串或数据集”,但这意味着您需要在Presenter中进行其他映射才能将数据集映射到模型。

  4. 是的,演示者可以设置这样的值,_view.EmployeeName=EmployeeModel.Name您将需要实现setaccess的访问修饰符_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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android MVP 如何将数据从模型返回给演示者

来自分类Dev

如何在MVP中对演示者进行单元测试

来自分类Dev

正在检查位置和数据服务,Android 开发者

来自分类Dev

如何在 WSO2 Micro Integrator 上的数据服务中配置数据源?

来自分类Dev

GKE元数据服务器如何在Workload Identity中工作

来自分类Dev

如何在WSO2数据服务服务器中链接外部MySQL数据库

来自分类Dev

如何在组件之间传输数据 - 反应?

来自分类Dev

如何在文件之间传输数据?

来自分类Dev

MVP-从视图到演示者获取数据

来自分类Dev

WCF数据服务

来自分类Dev

WCF数据服务中的重复动作

来自分类Dev

尝试使用Dagger 2实现MVP-如何在提供的演示者中获取对Activity的引用

来自分类Dev

尝试使用Dagger 2实现MVP-如何在提供的演示者中获取对Activity的引用

来自分类Dev

如何在打字稿文件中初始化VSTS扩展数据服务(HTML页面外部)

来自分类Dev

如何在xpinc应用程序中实现domino数据服务以在静态状态下显示便笺视图

来自分类Dev

如何在打字稿文件中初始化VSTS扩展数据服务(HTML页面外部)

来自分类Dev

WSO2 ESB集群数据库和数据服务

来自分类Dev

如何在KDB中传输数据?

来自分类Dev

在IIS或本地服务中托管数据服务

来自分类Dev

无法在(WCF数据服务)中创建简单的服务操作

来自分类Dev

如何在树模型中维护父QStandardItems和数据库行ID之间的链接?

来自分类Dev

WCF数据服务的VerificationException

来自分类Dev

消费WCF数据服务

来自分类Dev

在Angular2中,如何将不同的数据服务注入到每个组件中

来自分类Dev

如何使用Android中的“服务”传输从Web服务消耗的数据?

来自分类Dev

如何在参考列的工作表之间传输数据?

来自分类Dev

如何在不同的Web应用程序之间传输数据

来自分类Dev

如何在Digital Micrograph和R之间传输(连接)数据

来自分类Dev

如何在同一.ts文件中的两个组件之间传输数据

Related 相关文章

  1. 1

    Android MVP 如何将数据从模型返回给演示者

  2. 2

    如何在MVP中对演示者进行单元测试

  3. 3

    正在检查位置和数据服务,Android 开发者

  4. 4

    如何在 WSO2 Micro Integrator 上的数据服务中配置数据源?

  5. 5

    GKE元数据服务器如何在Workload Identity中工作

  6. 6

    如何在WSO2数据服务服务器中链接外部MySQL数据库

  7. 7

    如何在组件之间传输数据 - 反应?

  8. 8

    如何在文件之间传输数据?

  9. 9

    MVP-从视图到演示者获取数据

  10. 10

    WCF数据服务

  11. 11

    WCF数据服务中的重复动作

  12. 12

    尝试使用Dagger 2实现MVP-如何在提供的演示者中获取对Activity的引用

  13. 13

    尝试使用Dagger 2实现MVP-如何在提供的演示者中获取对Activity的引用

  14. 14

    如何在打字稿文件中初始化VSTS扩展数据服务(HTML页面外部)

  15. 15

    如何在xpinc应用程序中实现domino数据服务以在静态状态下显示便笺视图

  16. 16

    如何在打字稿文件中初始化VSTS扩展数据服务(HTML页面外部)

  17. 17

    WSO2 ESB集群数据库和数据服务

  18. 18

    如何在KDB中传输数据?

  19. 19

    在IIS或本地服务中托管数据服务

  20. 20

    无法在(WCF数据服务)中创建简单的服务操作

  21. 21

    如何在树模型中维护父QStandardItems和数据库行ID之间的链接?

  22. 22

    WCF数据服务的VerificationException

  23. 23

    消费WCF数据服务

  24. 24

    在Angular2中,如何将不同的数据服务注入到每个组件中

  25. 25

    如何使用Android中的“服务”传输从Web服务消耗的数据?

  26. 26

    如何在参考列的工作表之间传输数据?

  27. 27

    如何在不同的Web应用程序之间传输数据

  28. 28

    如何在Digital Micrograph和R之间传输(连接)数据

  29. 29

    如何在同一.ts文件中的两个组件之间传输数据

热门标签

归档