首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

本章主要讨论如何用插件方式来组织一个大型的软件项目,重点就如何创建自定义扩展点给出了一个示例。

33.1 将软件模块插件化的思路

SMS项目只是一个微型系统,所以将所有代码写在一个项目中也没什么问题。但对于大项目,所有代码挤在一个项目中将是产生混乱的根源。大项目除了要有清晰的架构设计外,同时也要有清晰的项目文件管理,模块化和子项目化是基本的手段,把可复用的代码和功能独立出来形成一个子项目,可以大大增强软件的复用性。

如果做了数个项目后,你还依然靠复制/粘贴来复用代码,那么可以学习一下Eclipse这个大型项目是如何来复用代码的。比如,Eclipse核心的插件机制原是自己设计的,后来OSGi成为标准后,Eclipse“拥抱”了标准,并且将自己的OSGi实现独立出来成立了一个子项目,即Equinox。而Equinox将可以被世界各地的程序员使用,现在已经有不少人开始尝试将Equinox应用在Web开发领域,这样Web应用也就能实现和Eclipse类似的插件机制。

再如本书的SMS项目,也可以将其分解为多个子项目:

  ● 包含一些公用接口类的sms-core项目。比如可以把树的ITreeEntry接口放在此   项目。

  ● 提供通用工具服务的sms-common项目。比如把system包下可被多个SWT项目共享的TreeContentProviderAdapter等程序放在此项目,另外Apache的common等工具类也可放在此项目下。

  ● 提供数据库访问服务的sms-db-accessing项目。将jdbc包放在此项目下。

  ● 负责具体业务功能实现的sms-score(成绩管理模块)。

这样做的好处就是结构更清晰了,而且可复用性大大增强。等到了下一个插件项目,就不必再复制/粘贴TreeContentProviderAdapter等类,只需把sms-common.jar复制到新项目中,即可重用过去的代码。

在上面分成的4个子项中,sms-core是系统最基础的项目,所有其他项目都需要使用方便依赖它,所以可以把sms-core写成RCP项目,成为所有项目的基座。其他的子项目也都以插件的形式存在,并且安装到sms-core中。不过,虽然有了思路,但在具体开发过程中还会碰到一些技术难点,其中以下面4个问题最突出。

  ● 能否像插件安装到Eclipse一样,把sms-common等插件安装到sms-core这个RCP项目基座中呢?

  ● sms-score插件依赖sms-db-accessing插件,sms-score需要引用sms-db-accessing中的类。这怎么实现?

  ● 多个插件共同依赖的JAR包怎么处理?比如有多个插件要用到log4j.jar来输出日志,如果把log4j.jar放在每个插件项目中,就太过冗余了。能不能只存在一个log4j.jar,让多个插件共享log4j.jar?

  ● RCP项目有一些界面元素需要根据安装的插件,做出相应的变化。这怎么实现?

下面就来逐个讨论这些问题,并给出解决问题的方案和办法。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论