随笔-1  评论-68  文章-98  trackbacks-0

1、Eclipse 法则(Eclipse Rule)

 

扩展者( Extender) ――添加插件

       贡献法则( Contribution Rule ):一切皆是贡献。

       遵循法则( Conformance Rule ):插件必须遵循预期的接口。

       共享法则( Sharing Rule ):增加,不要取代。

       有样学样法则( Monkey See/Monkey Do Rule ):遇到问题时,首先复制类似插件的结构。

       相关性法则( Relevance Rule ):只有在操作有可能成功时菜显示你所贡献的操作。

       整合法则( Integration Rule ):要整合,不要分裂。

       责任法则( Responsibility Rule ):明确指出你所开发的插件时问题的源头。

       针对 API 契约编程法则( Program to API Contract Rule ):首先检查 Eclipse API 契约,然后针对契约编程。

       Other 法则( Other Rule ):让用户可以选择所有东西,但把那些通常不用于当前视角的选项放在 Other… 对话框中。

       IResource 适配法则( Adapt to IResource Rule ):应该尽量为领域对象定义 IResource 适配器。

       分层法则( Strata Rule ):将语言无关的功能与特定于具体语言的功能分开,将核心性能与 UI 分开。

       用户连贯性法则( User Continuity Rule ):在多次会话之间,应该保持 UI 状态一致。

 

促成者( Enabler  ) ――发布扩展点

       邀请法则( Invitation Rule ):尽可能的邀请别人为你的作品作出贡献,发布扩展点。

       懒加载法则( Lazy Loading Rule ):只有在真正需要的时候才加载插件。

       安全平台法则( Safe Platform Rule ):作为扩展点的提供者,你必须保护好自己,不要让扩展者的误操作给你造成损失。

       公平竞争法则( Fair Play Rule ):所有使用者遵守同样的游戏规则,包括我自己。

       明确扩展法则( Explicit Extension Rule ):明确说明平台的什么地方可供扩展。

       发散性法则( Diversity Rule ):一个扩展点接纳多个扩展。

       良好防御法则( Good Fences Rule ):如果要交出程序的控制权,首先保护好你自己。

       用户决定法则( User Arbitration Rule ):如果有多个选择,由用户决定使用哪一个。

       明确 API 法则( Explicit API Rule ):将 API 与插件内部使用的类分开。

       稳定性法则( Stability Rule ):如果你已经开始邀请其它人作出贡献,就不要再改变游戏规则。

       保守 API 法则( Defensive API Rule ):只暴露你有信心的 API ,但同时也应该做好准备暴露更多的 API ,因为使用者会要求你这样做。(不含 internal 的包被认为是公开的、允许后续的扩展者使用的;不含 internal 的包,则不是打算拿到插件外使用的。)

 

发布者( Publisher) ――发布插件

       许可法则( License Rule ):每项贡献品都应该提供许可证。

2、Eclipse 插件(Plug-in)

何时需要一个插件类

 

       每个插件都由一个插件类来代表。插件类是一个Singleton,其中提供了一些钩子方法,可以对插件的什么周期事件作出响应。可以在插件第一次加载时读入所需的资源,也可以在插件停止时做必要的清理工资。另外,插件还负责提高一些共享信息。

 

投影(Shadow)的世界

 

       Eclipse平台启动时会将所有插件清单文件读入一个插件注册表中,为每个插件创建一个投影。此时不会加载插件本身,只加载它们的描述信息。(Platform.getPluginRegistry()

 

开发插件时,不要在项目属性中修改构建classpath,始终在清单文件中修改。

 

Eclipse中,每个插件都有自己的类加载器(class loader)和自己的类查找路径(classpath),后者将继承该插件所导入的其它插件的classpath。当插件的类加载器加载插件的第一个类时,就会激活该插件。

 

插件类加载器

 

1、  插件类加载器的上级加载器,Eclipse的引导加载器,boot.jar

2、  插件本身的类加载器,plugin.xml清单文件中的<run-time>元素中描述的类。

3、  相依插件的类加载器,如果插件依赖于其它插件,在类查找时,会在内部使用一个URL类加载器。

4、  不包括应用程序类/系统CLASSPATH变量的加载器。

 

加载扩展的全过程

 

1、  Eclipse平台取得扩展点。

2、  取得以在此扩展点上注册的扩展(实现IExtension接口)。

3、  对于每个扩展,取出其中以XML方式声明的配置元素(实现IConfigurationElement接口)。

4、  对于每个配置元素,根据该元素XML声明中class属性的值创建一个对象,确保定义的属性完整、有效。

5、  将新创建的扩展对象保存到一个集合中,而不是直接返回一个扩展对象。

 

理想的开发策略:

1、  信心:在增加新性能或修改旧结构时,不比担心对原代码造成破坏。

2、  学习:快速而自信地学习Eclipse地新领域。

3、  设计:鼓励自己和同事认真考虑设计,尤其是代码地外在接口,然后去考虑如何实现。

 

测试驱动开发(Test-Driven Development, TDD)的开发循环:

1、  编写欲添加功能的测试。

2、  针对这个测试引用到、暂未存在的类和方法,创建一段空的占用程序,使测试通过编译。

3、  实现测试,测试测试应该失败。

4、  尽量对实现代码加以清扫,例如去除其中的重复代码。

 

插件的测试策略

 

       从审美的角度,每个插件应该尽可能少的依赖其它插件;从实用的角度,以测试驱动的方式开发插件的每个部分。应该首先创建测试插件,让它依赖于新插件,以便完全用测试来驱动新插件的开发。

 

工作副本(working copy)是Eclipse JDT引入的一个概念,是原有的编译单元在内存中的复制品。让用户修改时,操作的实际是Java编辑器所创建的工作副本;当用户保存编译单元时,Java编辑器才把副本提交到文件系统,此时对编译单元的修改才会以Java元素变化增量的形式广播出去。(JavaUI.getWorkingCopyManager()

 

视角,定义了(一组)视图和编辑器的排列方式,工作台页面的布局,解决某个完整问题的环境。

 

降低插件的维护成本:良好的异常处理和错误报告机制;提供联机帮助文档(Eclipsehelp扩展点的扩展)。

 

分段(fragment)使开发者能够向现有的插件中添加代码和资源。(fragment.xml

分段的用途:

1、  为插件提供额外的字符串翻译(语言包)。

2、  为现有组件提供特定于平台的内容。

posted on 2006-08-22 01:38 Xu Jianxiang 阅读(700) 评论(0)  编辑  收藏 所属分类: Open Source

只有注册用户登录后才能发表评论。


网站导航: