Eclipse RCP: Actions VS Commands

2022-09-01 18:34:41

在 Eclipse RCP 的上下文中,Actions 和 Command 之间有什么区别?我知道它们都对菜单条目做出了贡献,但是哪一个更好?为什么呢?

在我阅读的所有在线资源中,我无法确切地了解两者之间的差异。我实际上并没有尝试使用它们,但只是想从更高层次的角度开始理解它们。

谢谢


答案 1

您是否阅读过 eclipse wiki FAQ 命令和操作之间的区别是什么?

您可能已经明白,操作和命令基本上做同样的事情:它们导致执行某段代码。它们主要由用户界面中的人工触发

Actions 的主要关注点是,表现形式和代码都存储在 Action 中
尽管操作委派中存在一些分离,但它们仍与基础操作相关联。选择事件将传递给 Actions,以便它们可以根据当前选择更改其启用状态(以编程方式)。这不是很优雅。此外,要在某个工作台部件上放置操作,您必须使用多个扩展点。

命令几乎可以解决所有这些问题。基本思想是命令只是要执行的一些代码的抽象思想。代码的实际处理是由处理程序完成的。处理程序由工作台的某个状态激活。此状态由平台核心表达式查询。这意味着我们只需要一个全局 Save 命令,该命令的行为会根据当前处于活动状态的处理程序而有所不同。

properties of a command

本文详细介绍了差异

操作

  • UI 和处理始终是绑定的。你们无法分开
  • 虽然操作可以贡献给工作台的不同部分(弹出菜单/工具栏),但它们都是不同的扩展点,因此您最终会在多个位置复制XML。最糟糕的是,并非所有扩展点都期望相同的配置。
  • 在多个位置指定操作是维护的噩梦。如果必须更改操作的图标,则需要在所有位置进行更改。
  • 在插件.xml中复制操作的另一个问题是,将在内存中创建相同操作的多个实例

命令涉及更多扩展点,但:

  • 处理程序可以与命令分开声明。这将为同一命令启用多个处理程序声明
  • active 当评估所有处理程序时,选择对最特定条件返回 true 的处理程序。所有这些事情都是在没有在内存中加载处理程序的情况下完成的。即使没有加载您的插件
  • 定义参数就是返回显示名称和 id 的映射。该名称将显示在键绑定页面中,并且 id 将用于在按下键序列时调用命令。
  • 定义一个 IExecutionListener,它只是命令执行的观察者,因此它既不能否决它,也不能对事件进行任何更改

答案 2

只是补充了VonC的出色答案,如果您的应用程序相对较小,命令可能有点过分。它们相对更难设置,当您拥有多个视角,编辑器和视图时,它们最闪耀。

对于简单的事情,我会采取行动。


推荐