我现在正在尝试理解模型- 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/