2

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

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

我应该怎么做才能将它们解耦?

4

2 回答 2

2

属性是解耦的,因为模型不直接耦合到特定视图,而是与具有这些属性的任何视图......但我明白你的意思。

您可以使用两种方法:

不透明状态

视图将它们的状态打包到一个不透明的状态对象中,该对象可以存储在模型中。然后视图负责从状态对象打包和解包其状态并相应地更改。可用于以不透明方式存储属性的对象示例包括字典、ExpandoObject 和 JSON/XML 字符串。

MVP 层次结构

Model-View-X 系列架构模式可以设置在层次结构中,其中底部 MV-X 的视图是下一个队列的模型。层次结构中通常需要两个或三个链接的 MV-X:

一个可选的底层 MVC 充当 DAL 层,一个可选的中间 MVC 充当业务层,以及一组用于顶部应用程序的不同用户/机器接口的 MVP。

底层的 MVC 架构完全与表示层无关,而顶层的 MVP 是为表示层量身定制的。

您问,顶级 MVP 如何将表示层的状态传递到底层以实现持久性?为什么当然要使用不透明的对象!

顺便说一句,如果这个设置听起来像微软在 WPF 中使用的 MVVM 模式,那是因为它是。MVVM 只是对 MVP 模式的轻微修改,如果它可以被称为不同的模式的话。

于 2013-01-17T00:06:18.997 回答
0

View 实现的接口应该具有表示 Presenter 可以读取的这些数量的属性。然后 Presenter 可以读取它们并将它们存储在 Settings 对象中。

当 Presenter 启动时,它可以获取 Settings 对象,并将值复制回 View。

于 2013-01-16T23:14:57.463 回答