模型 - 视图 - 演示者需要澄清

时间:2011-02-25 02:27:30

标签: oop user-interface design-patterns mvp

我需要一些关于MVP中不同组件交互的指导。

例如,我有一个管理医院数据的应用程序。所以让我们假设UI有一个患者编辑器。现在据我了解MVP,我会创建一个PatientPresenterPatientViewPatientModel。现在,PatientView将显示用户界面,并在其更改时将其委托给PatientPresenter,然后PatientModel将更新PatientManager。当模型发生变化时,是应该通知演示者还是直接通知视图然后更新视图?

现在让我们假设有一个父组件,PatientModel/View/Presenter显示患者概况,允许搜索患者等等。现在我可以为这个组件做另一个三元组,但它如何与PatientManagerMode交互?

如果PatientModel有多个PatientManagerView,那对我来说是有意义的,如果PatientView拥有PatientManagerPresenter的实例,那对我来说也是有意义的作为一个儿童控制,但为什么PatientPresenter应该拥有PatientManager的实例呢?如果不应该,谁应该?

那么,如果我双击{{1}}中的内容以便我可以编辑患者,究竟应该发生什么?

1 个答案:

答案 0 :(得分:0)

  

当模型改变时,应该如此   告知演示者或直接   通知视图然后更新   查看?

模型应告知演示者,然后更新视图。

  

现在让我们假设有一个父母   组件,一个PatientManager   显示患者的概述,但是   它将如何与...互动?   PatientModel /视图/演示?

我会将它们视为处理患者管理的更大UI的子视图。在这种情况下,Presenter将处理两者。负责填写患者经理并回复搜索。然后,当操作员选择患者时,视图将其传递给礼物。然后,当提出患者详细信息时,礼物将从模型中检索数据并填写患者详细信息。

我将它分层的方式就像这样

查看Assembly / EXE / Package 演示者汇编/ DLL /包 命令汇编/ DLL /包 演示者管理器程序集/ DLL /包 模型汇编/ DLL /包

View将实现Presenter中的视图接口,例如IPatientManagerView和IPatientView,并将自己注册到Presenter。实现将使用通过Presenter Manager公开的Presenter接口。例如IPatientManager和IPatient

演示者将实现Presenter Manager中的Presenter界面,并在Presenter Manager中注册自己。它可以是一个实现IPatientManager和IPatient的类。当需要执行UI相关或模型相关的操作时,它会执行命令中的命令。该命令将使用Model和/或Presenter Interfaces来执行操作。

抚养病人会看起来像这样。

您有一个实现IPatientManagerView的对话框,并在实现IPatientManager的类中注册。

  • 用户点击搜索
  • 搜索调用搜索方法 IPatientManager
  • 类实现IPatientManager 使用IPatientManagerView进行检索 搜索参数。
  • 然后设置并执行搜索 检索列表的命令 患者
  • 搜索命令调用ListPatients 在IPatientManager上
  • 课程实施 IPatientManager使用一种方法 IPatientManagerView清除和填充 在病人名单之外。

  • 用户双击患者
  • 对话框工具 IPatientManagerView将调用 实现IPatientManager的类 表明特定患者 待观察。
  • 课程实施 IPatientManager检索 有关患者所需的信息 从对话框实现查看 IPatientManageView
  • IPatientManager然后设置和 执行命令查看 患者
  • 该命令检索所有 来自模型的患者信息 并调用ViewPatient方法 课堂实施 IPatientManager
  • 然后IPatientManager检索 实施IPatient的课程。
  • 将患者信息传递给 IPatients并告诉它显示 本身。然后IPatient检索 注册的IPatientView 它。
  • 与患者一起填写 数据使用IPatientView然后 告诉IPatientView显示自己。

使用此方案,您可以通过更改实现各种视图接口的内容来彻底更改UI。您还可以通过创建实现View接口的虚拟类轻松地进行自动化测试。此外,为了将来的维护,每个交互都通过接口明确记录。