泽元网站内容管理系统(1.二次基于插件的松耦合体系(1)(组图) )
优采云 发布时间: 2021-09-07 20:06泽元网站内容管理系统(1.二次基于插件的松耦合体系(1)(组图)
)
1.基于插件的松耦合系统
软件行业有一个普遍现象:软件公司,尤其是产品型软件公司,往往会抵制对产品功能进行定制化的改变。这种现象的出现并不完全是因为修改本身的工作量(大多数情况下,修改的工作量其实很小),而是这种修改需要软件公司为每个客户维护一个产品版本库分支。以后对这个客户的任何反应都会基于这个分支,不容易和主版本同步进化,会带来比较大的管理成本。尤其是熟悉这家分行的关键人员离开后,对客户的服务水平会急剧下降。
针对这个问题,泽源软件搭建了一套插件系统,并为该系统提供了基于Eclipse的ZDeveloper开发工具,让客户的个性化需求可以通过插件来实现。特别是ZDeveloper允许通过在插件中声明扩展点和项来覆盖和扩展Zcms中原有的功能,但不影响产品本身的升级。这样,每个项目只需要维护一个或几个项目独有的插件的代码。项目仓库中的代码量大幅减少,代码的可读性和可维护性大大提高。修改产品的核心代码,让您只需要专注于测试项目相关的插件,测试的工作量也大大减少,从而更好地兼顾个性化实施和管理成本。
Zcms中的插件与Eclipse中的插件非常相似。它是一组由.plugin文件描述的插件,旨在扩展其他插件的功能,可以为其他插件提供扩展点和服务,遵循标准化的业务逻辑及其页面,可以独立已部署、启用和禁用。插件收录以下内容:
菜单、扩展服务、扩展点、扩展项和扩展行为由插件的 .plugin 配置文件描述。 JAVA 代码、JSP 页面、国际化文件都是实际的磁盘文件,它们的存储记录在 .plugin 文件位置。
2.二次开发工具
Zcms通过基于Eclipse的ZDeveloper(泽源开发平台)提供二次开发支持。通过ZDeveloper,Zcms允许专业的JAVA开发者为Zcms创建插件,扩展Zcms的UI界面、视图、菜单、定时任务、内容类型、交互功能、模板类型和模板通过插件标记,并允许系统通过扩展点和扩展项来干预包括权限、工作流和全文检索在内的各种行为。 ZDeveloper还提供数据库模型设计、数据库模型自动入库、数据库逆向建模、SQL语句生成、CURD文件创建和全面的国际化功能,从而实现业界最高水平的内容管理二次开发支持。
3.Menu 扩展
在Zcms中,所有的功能菜单都是由插件提供的。当系统启动时,Framework 会读取所有 .plugin 文件并在菜单管理器中注册菜单。如果部署并启用了插件,则显示与该插件相关的菜单,否则菜单消失。
Zcms二次开发工程师可以通过在插件编辑器的Menus选项卡中添加菜单来为Zcms添加新的功能菜单。
图片:为Zcms添加菜单
4.扩展服务和扩展项目
当某个插件实现的功能需要依赖该插件定义的某个接口的子类集合时,就需要定义一个扩展服务。扩展服务是一个插件配置项,用于声明该插件的扩展项注册项;扩展项也是一个插件配置项,用于声明扩展服务注册到的扩展项。扩展指定的类必须实现扩展服务指定的接口。
例如:内容核心插件需要管理所有模板标签,但是内容核心插件不知道其他插件实现了什么标签,所以需要提供模板标签扩展服务。其他插件可以向该服务注册自己的模板标签扩展实现,从而通知内容核心在模板编译、执行和标签展示中使用该标签。
扩展服务配置接口:
扩展的配置界面:
5.扩展点和扩展行为
为了使一个插件的JAVA类或JSP页面运行到指定的行数,可以执行其他插件中指定的程序逻辑(通常是附加的数据校验处理逻辑),扩展点需要定义。
Extension point 是插件配置项,用于声明本插件的扩展行为注册条目。当程序执行到扩展点所在的那一行时,会查找到所有注册到扩展点的扩展行为,并执行扩展行为指定的所有类。扩展项也是一个插件配置项,用于声明向哪个扩展点注册扩展行为,并指定调用扩展点时要执行的类。
扩展点类型是SWING中的事件,扩展行为类似于*敏*感*词*器。
例如:文章edit插件为文章保存的JAVA方法添加了一个扩展点,其他插件可以向这个扩展点注册扩展方法,实现文章信息前是否有预检保存文明词汇等
扩展点配置界面:
扩展行为配置接口: