上一篇:
Eclipse RCP详解(03):SWT的相关概念以及一个连连看游戏的实现 最近又去图书城逛了一圈,想看看有没有什么意外的惊喜,特别是想看看有没有Eclipse RCP方面写得比较深入的图书。然而结果是非常令人失望的。在整个计算机图书区,找不到一本和Eclipse有关的,更别谈RCP了。Java GUI编程的书不是没有,然而都是讲Swing和JavaFX的,似乎Eclipse RCP这个技术从来就不存在。
我前前后后也读过几本Eclipse的书,这些书基本上都是在亚马逊上买的。我另外一些关于Eclipse的知识则是来源于Eclipse官方网站上面的英文资料。下面,我把这些学习资料列出来,并适当做一些点评,和大家分享。
一、最权威的资料:Eclipse的官方文档
http://www.eclipse.org/documentation/ 由于Eclipse RCP程序是一种特殊的Plug-in程序,所以参考资料都在Platform Plug-in Developer Guide这一节。包括SWT、JFace、Workbench等的API手册都在这里。从这里学习RCP有一个优点,那就是可以看到各个版本API的变化,比如哪些API是Deprecated的。从API的变化可以看出Eclipse编程哲学的变化。比如说,文档中介绍怎么为Workbench添加菜单、工具栏的章节,在3.X版本的文档中,既包含了Actions,又包含了Commands。而到了4.X版本中,就只介绍Commands了。从这里学习RCP也有一个缺点,那就是这里的讲解很简略,虽然API手册很全面,但是却很难找到学习的入口点。
二、Eclipse Wiki中的RCP页面
http://wiki.eclipse.org/Rich_Client_Platform 这里好东西也不少啊。有好几个专家写的不同版本的Eclipse RCP tutorial,还有好几届EclipseCon上面关于RCP高级编程方面的报告,提供PDF下载。想知道Eclipse 4中RCP编程的模型发生了什么变化,读一读Eclipse 4 RCP tutorials就一目了然了。
三、一本非常好的英文书
我这里给的图片是直接从亚马逊网站上拉下来的,大家可千万别相信上面在线试读字样,在我的博客中这是不可能的。
不过我可以告诉大家一个秘密,那就是这本书的PDF都可以从CSDN上面下载到。
另外再告诉大家一个非常重要的秘密啊,那就是:
这本书的中文翻译非常垃圾,简直就是一坨屎,所以大家还是看英文版吧。
这本书的三个作者都非常牛逼,Jeff McAffer是Eclipse RCP和OSGi的领导者之一,Chris Aniszczyk是Eclipse插件开发环境的领导者之一,所以他们写的东西肯定是对Eclipse RCP介绍非常透彻的。另外一个作者Jean-Michel Lemieux曾经是Jazz项目的首席架构师和主要开发者,现在是Eclipse项目的贡献者之一,他的优势就是对大规模的企业级开发非常有心得。
我从这本书中学到不少,该书第二版对应的Eclipse版本是3.5。唯一有点美中不足的是,该书使用的英语略显晦涩,即使我自认为英语很好,也只能慢慢地啃。
四、我读过的最早一本中文Eclipse图书
我读这本书的时候Eclipse还是3.2。现在这本书已经没有卖的了,即使是在亚马逊。权当纪念吧。不过该书的PDF在网上是一找一大把。
五、我读的最新一本Eclipse中文图书
这本书的作者实力也很雄厚。这本书读起来也很顺。但是我觉得他包含的有用的信息量不够。在这本书的前面约三分之二的篇幅是讲SWT和JFace的,讲得非常好,是个不错的参考。但是中间只有一点点内容讲RCP,很简短,比官方文档中的介绍还短,一点也不深入。最后一部分讲Spring,只有两章,读起来也很顺,但是我认为虽然作者的企业级开发实力很雄厚,但是在客户端编程时直接使用Spring访问数据似乎有点搞错了方向。正确的做法应该参考我推荐的那本英文书,在客户端,只需要一个Session用来和服务器通讯即可。Spring,还是留给服务器端用吧。就是想用依赖注入也不需要Spring了,因为Eclipse 4自己提供这个功能了。当然,这本书中的示例,使用Spring DM写OSGi bundle,然后放到Eclipse中用,还是蛮有启发性的。
六、我读的另外一个牛人的两本牛书
它们的作者都叫周志明,是个牛人。后面一本看起来和Eclipse关系不大,我在这里列出来就是为了证明它们的作者很牛。这两本书其实都和Eclipse RCP关系不大,但是读一下还是很有用的。比如在前面一本书中,前两章对OSGi的介绍深入浅出,读完这两章后就明白原来一个bundle最重要的是它的SymbolicName和Version,其它的数据都是给人读的,也明白了我们不仅可以依赖一个plugin,而且可以单独导入一个bundle的某个package,更可以把一个package分开放到N个bundle中,每个bundle实现这个package的一部分。再比如作者介绍到每一个bundle都有自己的类加载器,当然plugin有例外,fragment plugin就没有自己的类加载器,而是和host plugin共用一个类加载器,理解这一点后再理解i18n问题就简单了,因为i18n的本质就是加载别的plugin里面的message资源。理解了类加载器的概念也更容易理解怎么从别的plugin里面加载资源,比如图片。
总结:虽然目前国内图书市场有几本关于Eclipse RCP的图书,但是它们对RCP的介绍不够深入。我的这一系列博文定位是不一样的。比如我就抛开SWT各个控件的具体用法不讲,只关注于如果要实现某一类功能,RCP程序应该用到哪些部件。重点放在探讨RCP的部件,如WorkbenchWindow、Menu、ToolBar、Editor上。所以我的文章虽然简短,但是其深度是超过了上面那些图书的。另外,我这里还有一个优点就是有趣的实例和漂亮的截图。
下一篇:
Eclipse RCP详解(05):JFace和结构化数据