在Eclipse RCP应用中利用扩展点机制解藕插件的依赖关系
在开发Eclipse RCP应用程序时,我们按照Eclipse插件的思路来组织和划分我们的程序模块,会使系统结构得到很大改善:比如,系统功能的灵活装配,系统的增量开发等。为了达到这种效果,我们要尽量减少插件之间的依赖关系。Eclipse平台中提供的扩展点机制可以用来实现这种目标。
一、业务场景
下面以一个具体的业务场景来说明:
比如,在我们的某个应用中,有Workspace、Document、Job三种业务功能,我们用三个Eclipse插件工程(WorkspacePlugin、DocumentPlugin、JobPlugin)分别来实现这些功能。
在三个插件中,WorkspaceView管理所有的Workspace业务对象,DocumentView管理所有的Document业务对象,JobView管理所有的Job业务对象。
同时,这三种业务不是孤立的,它们之间是有交互的:打开WorkspaceView中的某个Workspace,DocumentView会作相应改变:显示该Workspace下的所有Document。同样,JobView也会根据Workspace的变化作相应的改变。
针对以上的业务场景,一种自然的做法是,在WorkspacePlugin中添加对另外两个插件的引用,直接在WorkspaceView中调用DocumentView和JobView的相关方法。
但是这种做法导致了三个插件之间比较强的依赖关系,和我们的系统功能的灵活装配的目标有所差距。下面我们利用Eclipse扩展点机制来解决这种问题。
二、定义扩展点
不难看出,上述场景是一个典型的Observer模式的应用:WorkspaceView是交互的发起者,而DocumentView和JobView是交互的监听者。