Eclipse RCP:操作VS命令

时间:2009-02-16 06:51:12

标签: java eclipse command action rcp

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

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

由于

3 个答案:

答案 0 :(得分:39)

你读过eclipse wiki FAQ What is the difference between a command and an action?

吗?
  

你可能已经明白,动作和命令基本上做同样的事情:它们会导致某段代码被执行。它们主要是从用户界面中的艺术家触发的

     

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

     

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

properties of a command

article详细说明了差异

操作

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

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

  • 处理程序可以与命令分开声明。这为同一命令的多个处理程序声明
  • 评估所有处理程序的 activeWhen ,并选择对于最具体条件返回true的处理程序。所有这些都是完成,甚至没有将处理程序加载到内存中。即使没有加载你的插件
  • 定义参数是关于返回显示名称和地图的地图。 ids。名称将显示在键绑定页面中,当按下键序列时,id将用于调用命令。
  • 定义一个IExecutionListener,它只是命令执行的观察者,所以它既不能否决它也不能对事件进行任何更改

答案 1 :(得分:6)

如果您的应用程序相对较小,只需添加VonC的优秀答案,命令可能有点过分。它们设置起来相对较难,当你有多个视角,编辑和视图时,它们发挥最大作用。

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

答案 2 :(得分:4)

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