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

标签 c# .net winforms mvp

我现在正在尝试理解模型- View -演示者模式。假设我有一个用户界面( View )并且上面有一些控件。我想为用户提供保存控件状态的选项(例如,窗口大小、选定的选项卡、DataGridView 列大小等)。

现在,如果我创建一个“设置”模型,它将具有“dgvColumnSize1”、“WindowsSize”等属性。但随后模型了解 View ,并专门为其设计。

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

最佳答案

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

您可以使用两种方法:

不透明状态

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

MVP 层次结构

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

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

底层 MVC 架构完全与表示层无关,而顶层 MVP 则针对表示层进行了定制。

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

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

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

相关文章:

c# - ConnectionString 属性尚未初始化。刷新gridView时出现

c# - 在 C# 中从字符串到日期解析?

.net - 防止组合下降

c# - 您可以/如何在运行时为 PropertyGrid(对于 PCL)指定编辑器?

c# - 中止线程(Backgroundworker)..需要建议

c# - Entity Framework 类型初始值设定项异常

c# - DotNetCore 1.0 MVC 如何在直播中自动重定向到单个域

.net - 使用 RESTful WCF 和 Windows 窗体的用户/通过身份验证

.net - 如何在 XSD 数据集中处理 DBNull 到 bool 值的转换?

在 Linux 中使用 wine 的 .Net Framework