使用MVP模式编写用户界面设置类

时间:2013-01-16 23:11:29

标签: c# .net winforms mvp

我正在尝试了解Model-View-Presenter模式。假设我有一个用户界面(视图),并且有一些控件。我想给用户提供保存控件状态的选项(例如,窗口大小,选定选项卡,DataGridView列大小等)。

现在,如果我创建一个“设置”模型,它将具有“dgvColumnSize1”,“WindowsSize”等属性。但随后模型知道视图,并专门为它设计。

我应该怎么做才能将它们分离?

2 个答案:

答案 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。