我需要一些关于MVP中不同组件交互的指导。
例如,我有一个管理医院数据的应用程序。所以让我们假设UI有一个患者编辑器。现在据我了解MVP,我会创建一个PatientPresenter
,PatientView
和PatientModel
。现在,PatientView
将显示用户界面,并在其更改时将其委托给PatientPresenter
,然后PatientModel
将更新PatientManager
。当模型发生变化时,是应该通知演示者还是直接通知视图然后更新视图?
现在让我们假设有一个父组件,PatientModel/View/Presenter
显示患者概况,允许搜索患者等等。现在我可以为这个组件做另一个三元组,但它如何与PatientManagerMode
交互?
如果PatientModel
有多个PatientManagerView
,那对我来说是有意义的,如果PatientView
拥有PatientManagerPresenter
的实例,那对我来说也是有意义的作为一个儿童控制,但为什么PatientPresenter
应该拥有PatientManager
的实例呢?如果不应该,谁应该?
那么,如果我双击{{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的类中注册。
使用此方案,您可以通过更改实现各种视图接口的内容来彻底更改UI。您还可以通过创建实现View接口的虚拟类轻松地进行自动化测试。此外,为了将来的维护,每个交互都通过接口明确记录。