25

Eclipse RCP 上下文中的操作和命令有什么区别?我知道它们都对菜单条目做出了贡献,但哪个更好?为什么?

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

谢谢

4

3 回答 3

41

您是否阅读过 eclipse wiki常见问题解答 命令和操作之间的区别是什么?

您可能已经了解 Actions 和 Commands 基本上做同样的事情:它们会导致执行某段代码。它们主要由用户界面中的人工制品触发

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

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

命令的属性

本文详细介绍了差异

行动

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

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

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

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

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

于 2009-02-16T07:36:05.517 回答
4

请记住,以后版本的 Eclipse 可能会弃用 Action。我建议您从一开始就使用 Command 。

于 2010-06-14T08:09:59.200 回答