Eclipse RCP上下文中的Actions和Commands之间有什么区别?我知道他们都对菜单条目有贡献,但哪一个更好?为什么?
在我阅读的所有在线资源中,我无法深入了解两者之间的差异.我实际上并没有尝试过使用它们,但只是想从更高层次的角度来理解它们.
谢谢
您是否阅读过eclipse wiki 常见问题解答命令和操作之间有什么区别?
您可能已经了解动作和命令基本上做同样的事情:它们导致执行某段代码.它们主要由用户界面内的艺术家触发
Actions的主要关注点是表现形式和代码都存储在Action中.
尽管Action Delegates中存在一些分离,但它们仍然与基础操作相关联.选择事件将传递给Actions,以便它们可以根据当前选择更改其启用状态(以编程方式).这不是很优雅.另外,要在某个工作台部件上执行操作,您必须使用多个扩展点.命令几乎可以解决所有这些问题.基本思想是命令只是要执行的一些代码的抽象概念.代码的实际处理由处理程序完成.处理程序由工作台的某个状态激活.平台核心表达式查询此状态.这意味着我们只需要一个全局Save命令,该命令根据当前处理的处理程序而表现不同.
该文章详细介绍了差异
行动:
在UI和处理总是并列.你无法互相分离
虽然可以将动作贡献给工作台的不同部分(弹出菜单/工具栏),但它们都是不同的扩展点,因此您最终会在多个位置复制XML.最糟糕的是,并非所有扩展点都期望相同的配置.
在多个地方指定操作是一项维护噩梦.如果您必须更改操作的图标,则需要更改所有位置.
在plugin.xml中复制Actions的另一个问题是,将在内存中创建相同Actions的多个实例.
命令涉及更多扩展点,但是:
处理程序可以与命令分开声明.这为同一命令启用了多个处理程序声明.
将评估所有处理程序的activeWhen,并选择对于最具体条件返回true的处理程序.所有这些事情都没有在内存中加载你的处理程序.即使没有加载你的插件!
定义参数就是返回显示名称和id的映射.名称将显示在键绑定页面中,当按下键序列时,id将用于调用命令.
定义一个IExecutionListener,它只是命令执行的观察者,因此它既不能否决它也不能对事件进行任何更改
只是添加到VonC的优秀答案,如果您的应用程序相对较小,命令可能有点过分.它们设置起来相对困难,当您有多个视角,编辑器和视图时,它们会发挥最大作用.
对于简单的事情,我会采取行动.