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

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

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

最佳答案

在模型不是直接耦合到特定视图,而是耦合到具有那些属性的任何视图的意义上,属性是分离的……但是我理解您的意思。

您可以使用两种方法:

不透明状态

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

MVP阶层

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

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

最底层的MVC架构完全与表示层无关,而最顶层的MVP则适合于表示层。

您问最高的MVP如何将表示层的状态传递到底层以保持持久性?为什么要使用不透明的对象!

顺便说一句,如果此设置听起来像WPF中使用的Microsoft MVVM模式,那是因为。如果可以将MVVM称为MVP模式,则它仅是MVP模式的略微修改。

关于c# - 使用MVP模式编写用户界面设置类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14369574/

10-14 16:11