gpt4 book ai didi

communication - EventAggregator vs CompositeCommand

转载 作者:行者123 更新时间:2023-12-03 21:42:11 24 4
gpt4 key购买 nike

我通过 Prism 指导工作,并认为我掌握了他们的大多数通信工具。

命令非常简单,因此很明显,DelegateCommand 将仅用于将 View 与其 Model 连接起来。

当涉及到跨模块通信时,特别是何时使用 EventAggregation 而不是复合命令时,这有点不太清楚。

实际效果是一样的,例如

  • 您发布一个事件 -> 所有订阅者都会收到通知并执行代码以响应
  • 你执行一个复合命令 -> 所有注册的命令都被执行,并附带它们的代码

  • 两者都按照“触发并忘记”的方式工作,即他们不关心触发事件/执行命令后订阅者的任何响应。

    尽管我知道两者的实现(在引擎盖下)非常不同,但我很难看到使用上的实际差异。

    那么我们是否应该考虑一下它的实际含义——事件?那是当事情发生(事件发生)时吗?用户没有直接请求的东西,比如“网络请求已完成”?

    指挥部呢?这是否意味着用户点击了某些东西,从而向我们的应用程序发出命令,直接请求服务?

    是这样吗?或者是否有其他方法可以确定何时使用其中一种通信工具而不是另一种。该指南虽然是我读过的最好的文档之一,但没有给出具体解释。

    所以我希望参与/使用 Prism 的人可以帮助阐明这一点。

    最佳答案

    这两者之间有两个主要区别。

  • 可以执行命令 .一个命令
    可以说是否有效
    通过调用执行
    Command.RaiseCanExecuteChanged() 和
    有它的 CanExecute 委托(delegate)
    返回假。如果你考虑
    “全部保存”的情况
    CompositeCommand 合成几个
    “保存”命令,但其中之一
    命令说它不能
    执行,Save All 按钮将
    自动禁用(很好!)。
  • EventAggregator 是一个消息传递
    模式和命令是一个
    指挥模式
    .虽然
    CompositeCommands 不是显式的
    一个 UI 模式,它是隐含的
    (通常他们连接到一个
    输入 Action ,如按钮单击)。
    EventAggregator 不是这样的——
    应用程序的任何部分
    有效地引发一个 EventAggregator
    事件:后台进程,
    ViewModels 等。它是一个
    消息传递的中介途径
    在您的应用程序中提供支持
    对于过滤之类的事情,
    后台线程执行等

  • 希望这有助于解释差异。很难说何时使用每个,但通常我使用经验法则 如果是引发事件的用户交互,请使用命令来处理其他任何事情,请使用 EventAggregator .

    希望这可以帮助。

    关于communication - EventAggregator vs CompositeCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519975/

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