我正在尝试了解Model-View-Presenter模式。假设我有一个用户界面(视图),并且有一些控件。我想给用户提供保存控件状态的选项(例如,窗口大小,选定选项卡,DataGridView列大小等)。
现在,如果我创建一个“设置”模型,它将具有“dgvColumnSize1”,“WindowsSize”等属性。但随后模型知道视图,并专门为它设计。
我应该怎么做才能将它们分离?
答案 0 :(得分:2)
属性是分离的,因为模型不直接耦合到特定视图,而是任何具有这些属性的视图......但我明白你的意思。
您可以使用两种方法:
不透明状态
视图将其状态打包为可以存储在模型中的不透明状态对象。 然后,视图负责从状态对象打包和解包其状态并相应地更改。 可用于以不透明方式存储属性的对象示例包括字典,ExpandoObject和JSON / XML字符串。
MVP层次结构
可以在层次结构中设置Model-View-X系列架构模式,其中底部MV-X的视图是下一个的模型。 通常,层次结构中需要两个或三个链式MV-X:
可选的底层MVC充当DAL层,可选的中间MVC充当业务层,一组MVP充当应用程序的不同用户/机器接口。
底层MVC架构完全与表示层无关,而顶级MVP则适合于表示层。
你问,顶级MVP如何将表示层的状态传递到底层以保持持久性?为什么当然使用不透明对象!
顺便说一句,如果这个设置听起来像是WPF中使用的微软的MVVM模式,那是因为它。 MVVM只是对MVP模式的一点修改,如果它可以被称为不同的模式。
答案 1 :(得分:0)
View实现的界面应具有表示Presenter可以读取的这些数量的属性。然后,Presenter可以读取它们并将它们存储在Settings对象中。
启动Presenter时,它可以获取Settings对象,并将值复制回View。