gpt4 book ai didi

.net - 我是否正确实现了 MVP/Presentation Model UI 模式?

转载 作者:行者123 更新时间:2023-12-04 06:48:36 24 4
gpt4 key购买 nike

我正在重新开发一个 Winforms 应用程序,并希望使用 Presentation Model pattern 的变体。为用户界面。如果我做得正确,有人可以从以下解释中告诉我吗?

我决定按如下方式设置依赖项:

   Model <---- Presentation Model <---- View

那是:
  • 该模型除了自己之外什么都不知道。
  • 演示模型具有对模型的引用(反之亦然)。
  • View 具有对表示模型的引用(反之亦然)。

  • 我正在使用 Winforms 数据绑定(bind)来保持 View 和表示模型同步。

    现在这一切都像一个魅力,除了当我需要处理例如单击表单的“关闭”按钮。由于表示模型没有对 View 的引用,它不能订阅 View 发布的任何事件。因此,我想出了以下拐杖:
    Presentation Model                   View
    +--+ +--+
    | | | |
    | | | <--------X closeButton.Click event fires
    | | | |
    | | +--------X |
    | | CloseRequested = true | | |
    | | +--------> |
    | | | |
    | | CloseRequested CloseRequested | |
    | <-----------------------------------< |
    | | | |
    | X--------+ | |
    | | | IsClosed = true | |
    | <--------+ | |
    | | | |
    | | IsClosed MustClose | |
    | >-----------------------------------> |
    | | | |
    | | | X--------> view.Close()
    | | | |
    +--+ +--+

    那是:
  • 用户单击“关闭”按钮。
  • 按钮的Click事件在 View 中被捕获,它通过设置属性 CloseRequested 使用react.
  • 数据绑定(bind)将此值传输到表示模型中的相应属性。
  • 表示模型通过设置其属性 IsClosed 来响应此更改。 .
  • 数据绑定(bind)将此值传输到 View 的 MustClose .
  • View 通过关闭自身来响应这种变化。

  • 演示模型与 View 很好地分离,反之亦然,但是 仅处理单个按钮命令 就需要做很多工作.考虑到我决定的依赖关系图,有没有更简单的方法?

    最佳答案

    我最近一直在将 Windows 窗体应用程序转换为 MVP 架构,看起来您已经以与我一直在做的类似方式设置了依赖项。但是,我只有一个 IPresenter接口(interface),它定义了允许 View 传递用户请求的方法。由于 View 已经依赖于演示者和对它的引用,因此直接在其上调用请求方法似乎是明智的。

    所以在我的系统中,演示者监听来自模型的事件并触发它自己的演示事件以供任何感兴趣的 View 监听。 View 通过适本地更新自身来响应这些事件,并在发出用户请求时将它们转发给演示者。

    关于.net - 我是否正确实现了 MVP/Presentation Model UI 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3435834/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com