Foxnic-Web —— 模块的多版本支持
概述
站在产品角度,如何满足不同客户的需求定制?如何积累丰富的业务功能,尽可能复用避免重复开发?针对最近实施的几个客户,Foxnic-Web 为模块增加了多版本特性,在一定程度上解决了甲方需求的多样性和差异性。
Foxnic-Web 模块多版本主要是从 UI 界面和 Service 层着手。
本文中的示例代码均可在 https://gitee.com/LeeFJ/foxnic-samples 项目中找到。
UI界面多版本支持
为了实现UI界面多版本,我们首先要在模块页面内新建一个目录,如图所示:
第一步:建立目录与文件
如图所示,profile 目录下包含 advance 目录和另外5个js以及html文件,这5个文件是模式实现。现在为了实现高级版本在 profile 目录下创建了 advance 目录,并把 UI 代码放置其中。需要注意的是,页面入库文件名需保持一致,如菜单入口页面是 profile_list.html 那么在 advance 目录下也同样需要一个同名文件 profile_list.html。
第二步:配置菜单
版本目录建好后,需要将目录配置到菜单,如图所示。进入对应的菜单页面,点击 “版本管理”按钮,维护一个版本。
维护完毕,重新登录 即可。这时,我们可以看到两个版本可以切换使用了
因为在项目实 施时,用户只会固定使用一个特定的版本,所以版本切换的菜单受权限是需要控制的,需要勾选 “菜单管理”下的 “功能版本切换(Fork)”权限。
UI界面多版本的代码生成
例如,我们要为数据字典管理生成另外一个版本的代码,此时,我们已经实现了默认的代码生成类 SysDictConfig ,新版本的代码实现类继承 SysDictConfig 类,并调用 context.setViewImplDir("tree") 指定界面生成的目录名即可,如下代码所示:
public class SysDictConfig_Tree extends SysDictConfig {
public SysDictConfig_Tree() {
super();
// 指定实现的目录名称
this.context.setViewImplDir("tree");
}
@Override
public void configSearch(ViewOptions view, SearchAreaOptions search) {
search.inputLayout(new Object[]{
SYS_DICT.NAME,SYS_DICT.CODE
});
}
}
UI界面版本规则
事实上,在项目实施过程中,我们只需要锁定一个版本,或按登录人不同的身份使用不同的界面,我们在系统参数进行配置即可。目前支持按账户、租户指定不同的界面。当然也可以逐步支持到按角色、部门、岗位、业务角色等不同的身份使用不同的界面。
参数配置界面如图所示:
Service多版本支持
所谓 Service 的多版本,即一个 Service 有多个实现,不同的场合使用不同的版本,如图所示:
在这个示例中,我们 对 IDictService 接口有4个实现。通过参数配置,指定默认实现为 DictServiceImplForChinaYIE 类,Service 实现类的配置规则和 UI 类似,可按不同的身份使用不同的 Service 实现。如图所示:
Service多版本的代码生成
多版本 Service 的代码生成比较简单,在 configService 方法中执行 serviceImpl 配置方法即可。由代码生成工具自动生成这些其它版本的实现类。
@Override
public void configService(ServiceOptions service) {
//开启多服务实现的支持
service.serviceImpl("ForCLPS","实现CLPS客户EAM定制逻辑");
service.serviceImpl("ForChinaYIE","实现 ChinaYIE 客户定制逻辑");
service.serviceImpl("ForAUX","实现奥克斯 PMS 项目定制逻辑");
}
小结
本小节主要介绍了 Foxnic-Web 的多版本特性,包括UI界面的多版本和Service的多版本。
相关项目
https://gitee.com/LeeFJ/foxnic
https://gitee.com/LeeFJ/foxnic-web
https://gitee.com/lank/eam
https://gitee.com/LeeFJ/foxnic-samples