我在本文中会谈些技术,但不会深入讲解,写这篇文章的缘故是把e4的教程基本看完后,想写点心得感受发封邮件给朋友们,后来想索性就写篇随笔吧。
*关于eclipse的感触
由于工作关系我和eclipse打交道4年多,基于RCP开发IDE,基于equinox+jetty开发Web服务端等等,用过各种技术和框架,做过很多的尝试;eclipse作为一个基于osgi的实现,基于插件的开发方式(扩展点,声明式服务,osgi服务,方便灵活安全的插件依赖策略)留给我深刻的印象,我认为osgi是开发大型应用程序最好的组织程序结构或代码的方式之一,因为它提供了安全灵活可靠的基础运行环境,简单的说我只需要开发和组织服务就好了,总之,我觉得osgi的潜力值得挖掘。
在e4之前,使用eclipse提供的插件开发环境PDA,可以快速的开发出另一个Eclipse(在企业中常见的如各种IDE,notes,还有如xmind等),开发测试打包,eclipse给予一站式服务。到了e4,号称是划时代的eclipse,在学习了e4开发资料后,我基本同意这说法,我从下面2个方面说点想法和感受。
*从使用者角度(xubuntu12.04环境)
---兼容性
6月发布后,直接用4.2打开原来3.7的workspace,完全没有问题。
---速度(启动,使用)
主要和workspace中内容以及自身插件相关,所以我觉得是个没啥好说的问题,总之没感觉比以前慢。我在想CSS引擎的引入,对UI的性能有多少影响呢?
---稳定性
运行一切ok,各种插件如svn等基本没问题,使用上原来咋用,现在依旧。
从代码角度,简单说,e4提供了兼容层,将eclipse3.x映射到e4,从使用效果看,稳定性不错。
---操作体验
1)mylyn终于默认启用了吧,感觉它没有像描述的那样合我心意。打开时展现关闭时环境,比其展现我操作过的东西,我更加适应前者。但是对于这类尝试和创新,我表示欣赏。
注, mylyn收集用户操作,将最常用的工作,选择等展现给用户。秉持的理念是,减少信息过载,人能处理的信息是有限的,所以把"喜好"给使用者。
2)对于视图,支持"临时小窗口"显示,当你点击其他区域时,它有消失了,这我觉得是个好功能,因为显示区域(屏幕)是一种稀缺资源。
如下图,右上方的控制台视图,显示为临时的小窗口
3)右下侧的快速打开视图按钮不见了,我一直觉得它是項方便的功能(虽然我也很少使用)。
4)工具栏增加了搜索框,我认为"ctrl+3"可能是eclipse最强的功能,因为eclipse的一切功能可以通过它找到并打开,可能很多人不知到吧,而现在eclipse把它放在工具栏上了。
*从开发者角度说些想法,我将从几个问题表述观点
---e4是否值得现在就学习?是的。
在eclipse4.2中,如果下载RCP/RAP版本的话,可以说在新建中见不到e4的影子,它还是原来的样子。通过学习教材,发现需要安装独立的e4插件,在新建中e4也被独立于一个分类,和"插件开发"的内容分开。
e4的各种插件版本号停留在0.9。这些都说明e4的开发模式,还处于孵化阶段。
但是还是值得学习,一是当照着教材学习后,我发现从开发的配套工具,开发模式,e4的api已经基本成形。二是e4的特性,比之从前eclipse更加优秀,对于开发产品是有利的,而这些特性,可以从其他的Java框架中见到影子(如JUnit4,spring等),我相信会是eclipse以后的发展趋势。
---e4的新特性
1)基于EMF的UI建模
eclipse的透视图,编辑器,视图等等,很多UI元素有对应的模型,现在操作模型就是操作UI。而且可以在e4模型的基础上,实现自定义模型(e4的很多机制都能实现定制扩展)。
2)分离UI的定义和实现
我觉得UI建模后,对后续的设计都会产生很大的影响,用模型去描述和定义内容,而其他的事(如展现,修改变化等)就交给相应的其他模块去负责,这样整个程序框架的组织变的清晰,扩展性变的灵活且强大。
e4提供了对UI模型的自定义展现,即使SWT也不再是必须的。
技术简介,
实现IRendererFactory接口,可以参考WorkbenchRendererFactory的实现;然后在扩展点中通过 rendererFactoryUri属性配置自己的factory。
3)程序通过文件配置
RCP程序的UI架构(菜单栏,工具栏,透视图,编辑器等)和非UI功能(如命令等),现在通过配置文件组织在一起(把上面说的)。打个比方,现在RCP程序有一张清楚明白的设计图,它(们)清晰的指明这个RCP有哪些东西,是个什么样子,而以前eclipse3.x不启动是不知道有些什么的。
技术简介,Application.e4xmi每个RCP唯一的一个文件,描述程序结构("设计图");fragment.e4xmi,称为"段文件",这个插件的fragment项目一样,它的作用是可以将程序内容从Application.e4xmi中分离出来,最后有运行时合并。(这个对于团队协作开发是必要的,同时全部放在一个文件里的话,让人觉得不放心)。
4)CSS引擎,主题切换
现在可以把SWT的UI展现定义在不同的CSS文件中,支持动态的切换。
这个是SWT属性和CSS属性的对照表http://wiki.eclipse.org/E4/CSS/SWT_Mapping。
颜色,字体,背景基本都有,我还没试过效果,但是个吸引人的特性,以前程序的美化一直是个问题,也很难把美化做的彻底,以后就是項轻松的工作了吧,甚至美化直接交给美工,并行开发都有可能。
5)注释和依赖注入
技术实现上,简单说是e4的模型关联上下文,上下文里包含了各种信息,包括注入时需要的内容,然后在运行时通过对注释的解析,从上下文中找到对应的内容,注入到对象中。
同时,还可以扩展自定义注释。
这种设计有很多有点,如解藕类关系,便于修改代码和测试,减少编程代码等。
*写在最后
EMF可以说是e4的核心之,我一直在考虑如何使用EMF模型,以为其他框架做支持,现在e4给了一个参考。
e4将很多好的设计理念和技术融入新的架构中,并且保持了很好的向后兼容性,我认为e4会是更加优秀的eclipse框架。
*学习资料
http://www.vogella.com/eclipse.html(推荐,首先瞅瞅这儿吧)