Java EclipseRCP:操作与命令

Java EclipseRCP:操作与命令,java,eclipse,command,action,rcp,Java,Eclipse,Command,Action,Rcp,在EclipseRCP上下文中,操作和命令之间有什么区别?我知道它们都有助于菜单条目,但哪一个更好?为什么 在我阅读的所有在线资源中,我无法确切理解两者之间的区别。我实际上并没有尝试使用它们,只是想从更高层次的角度来理解它们 谢谢你读过eclipse维基吗 您可能已经了解了操作和命令基本上做的是相同的事情:它们导致执行某段代码。它们主要由用户界面中的工件触发 操作的主要问题是显示和代码都存储在操作中 尽管在操作委托中存在一些分离,但它们仍然与底层操作相连接。选择事件将传递给操作,以便它们可以根据

在EclipseRCP上下文中,操作和命令之间有什么区别?我知道它们都有助于菜单条目,但哪一个更好?为什么

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


谢谢

你读过eclipse维基吗

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

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

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

这详细说明了差异

行动

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

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

如果您的应用程序相对较小,那么添加到VonC的优秀答案中的命令可能有点过火。它们相对来说比较难设置,当您有多个透视图、编辑器和视图时,它们最为耀眼


对于一些简单的事情,我会使用actions。

记住,Action可能会在Eclipse的更高版本中被弃用。我建议您从一开始就使用命令。

同意(+1)。但我总是觉得命令在某种程度上更“干净”;)特别是因为应用程序往往会增长。。。。我从动作开始,但现在我使用命令,因为键绑定我不认为,从动作开始是个好主意,正如Mario Ortegón所说,应用程序往往会增长。。。将操作迁移到命令会非常痛苦但是,是的,操作更容易设置。有一个图像不可见。@TrueSoft图片已还原