在iBizSys中除了业务模型之外,模板也是一个重要的组成部分。系统、文档等成果物都可以通过模板来进行生成。
但是一提到模板,可能大家就会觉得它是一个很高大上很神秘的样式,但是如果我们从本质上去看,其实它就是一个及其简单的内容。使用模板的目的是让程序员摆脱重复、模式化、低价值的代码。
今天就按照一个小示例来了解一下平台中的模板。
首先我们先来看一下客户(KH)实体与产品(CP)实体这两个实体Service的代码片段。
package com.sa.ibiz.demo.srv.demo.service;
import com.sa.ibiz.demo.srv.demo.entity.KH;
import com.sa.ibiz.demo.srv.demo.dao.KHDAO;
import com.sa.ibiz.demo.srv.demo.demodel.KHDEModel;
/**
* 实体[KH] 服务对象基类
*/
@Component
public class KHService extends com.sa.ibiz.demo.srv.DemoSysSysServiceBase<KH> {
private static final Log log = LogFactory.getLog(KHService.class);
/**
* 实体数据集合[DEFAULT]标识
*/
public final static String DATASET_DEFAULT = "DEFAULT";
public KHService () {
super();
}
}
package com.sa.ibiz.demo.srv.demo.service;
import com.sa.ibiz.demo.srv.demo.entity.CP;
import com.sa.ibiz.demo.srv.demo.dao.CPDAO;
import com.sa.ibiz.demo.srv.demo.demodel.CPDEModel;
/**
* 实体[CP] 服务对象基类
*/
@Component
public class CPService extends com.sa.ibiz.demo.srv.DemoSysSysServiceBase<CP> {
private static final Log log = LogFactory.getLog(CPService.class);
/**
* 实体数据集合[DEFAULT]标识
*/
public final static String DATASET_DEFAULT = "DEFAULT";
/**
* 实体数据集合[有效产品]标识
*/
public final static String DATASET_YXCP = "YXCP";
public CPService () {
super();
}
}
从代码中可以发现其中从内容上而言,除了两者KH和CP的区别,其他内容均为重复的内容。
接下来我们来看下生成以上Service代码片段的模板部分,其中将代码包路径、实体名称、数据集合名称等动态化的内容由模板参数进行替换。
package ${pub.getPKGCodeName()}.srv.${item.getPSSystemModule().codeName?lower_case}.service;
import ${pub.getPKGCodeName()}.srv.${item.getPSSystemModule().codeName?lower_case}.entity.${item.codeName};
import ${pub.getPKGCodeName()}.srv.${item.getPSSystemModule().codeName?lower_case}.dao.${item.codeName}DAO;
import ${pub.getPKGCodeName()}.srv.${item.getPSSystemModule().codeName?lower_case}.demodel.${item.codeName}DEModel;
/**
* 实体[${item.codeName}] 服务对象基类
*/
@Component
public class ${item.codeName}Service extends ${pub.getPKGCodeName()}.srv.${item.getPSSystem().codeName}SysServiceBase<${item.codeName}>{
</#if>
</#if>
private static final Log log = LogFactory.getLog(${item.codeName}Service.class);
<#list item.getAllPSDEDataSets() as dedataset>
/**
* 实体数据集合[${dedataset.logicName}]标识
*/
public final static String DATASET_${dedataset.name?upper_case} = "${dedataset.name}";
</#list>
public ${item.codeName}Service (){
super();
}
}
对于模板中的模型参数
pub.getPKGCodeName()
获取配置的代码包名
item.getPSSystemModule().codeName
获取实体的系统模块的代码名称
item.codeName
获取实体的代码名称
平台里通过对象运行时的形式便于大家快速的去进行查看模型,下面我们就来了解平台中的对象运行时。
从运行时中可以看到pub.getPKGCodeName()
就对应了com.sa.ibiz.demo
实体运行时获取实体代码名称
通过以上的小示例,相信大家应该已经能够了解到,编写模板本身是一个非常简单的过程,而困难的是如何来规划一个模板架构使得其可以最大程度的使用业务的模型。
网友评论