eclipse的actioncommand都能够执行一段确定的代码。通过一个工具栏上的图标、菜单项都可以触发执行。Action框架已经被验证过了,集成的非常紧密,而且很容易实现。但是为什么要废弃action改成command呢?

Actions

    Actions主要关注的是表现形式,而且所有代码都在action中。尽管有些代码也分布在action代理中,但是本质上还是action。选择事件传递给actionaction根据当前的选择改变状态。这不是一种简洁的办法。同时,想要放置一个action到工作区的某个位置,你需要使用若干个扩展点:

·        org.eclipse.ui.viewActions

·        org.eclipse.ui.popupMenus

·        org.eclipse.ui.editorActions


Commands

    Command优雅的解决了action的问题。Command的基本思想是它只是抽象的执行代码,实际的代码在handler中。Handler由工作区的确定情形激活。这个情形通过平台核心表达式查询。这意味着,我们只需要全局的Save命令,这个命令根据当前激活的handler决定不同的行为。尽管这个特殊的command被重定向为一个全局的action,但是这仍然需要程序实现而不是声明。向工作区放入一个command只需要用一个扩展点

·      org.eclipse.ui.menus

     除了上面提到的,handler能够被清单文件中一种强大的表达式语法激活。这意味着在RCP应用或者一个流畅运行的工作区中,将会有更少的代码、更多的声明。

    如果你去看看首选项页的General > Keys ,你会找到平台支持的command列表,包括它们所属的上下文(when列)和配置(scheme)。键绑定连接commandcommand连接到handler。用户可以改变一个command的键绑定而不需要让handler知道,commandhandler在不同的环境下也可以动态变化。


原文地址:http://wiki.eclipse.org/FAQ_What_is_the_difference_between_a_command_and_an_action%3F