【问题标题】:Writing a user interface settings class using MVP pattern使用 MVP 模式编写用户界面设置类
【发布时间】:2013-01-16 23:11:29
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# .net winforms mvp


    【解决方案1】:

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

    您可以使用两种方法:

    不透明状态

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

    MVP 层次结构

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-12
        • 1970-01-01
        • 2010-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多