一、MDD核心概念
元数据 | 元数据是描述实体的数据,对数据及信息资源的描述性信息。 |
UI元数据 | UI元数据是描述前端UI的数据,对前端UI数据级信息资源的描述性信息。(UI元数据组成:容器、组件、动作) |
UI模板 | 基于元数据配置和生成的模式化页面,一个模板由实体元数据和UI元数据进行抽象描述。 |
业务规则 | 后端业务逻辑都称为业务规则;MDD提供规则引擎使得用户可以快速扩展自定义规则。 |
- 产品界面展现形式-元数据
- 产品界面展现形式-UI元数据
- 产品界面展现形式-UI模板
- 产品界面展现形式-业务规则
二、MDD后端运行机制
前后端一体化的模型驱动方案:
MDD组件层次结构:
MDD调用方式:
UI元数据驱动引擎-界面加载过程:
1.查询UI元数据模型。前端调用/meta接口,返回数据结构;
2.经过Node层转发,调用后端 /bill/getbill 返回查询数据;
3.Node层将协议中的view自动转换成可执行的JS文件(VM对象),实现模型层的模式化渲染。
后端规则引擎-执行过程:
BillServiceImpl是通用CRUD的抽象,提供所有单据的操作入口。
三、MDD扩展开发
1.开发过程
2.后端扩展开发-业务规则开发
- 自定义业务规则:类需要继承 AbstractCommonRule,然后通过注解Component标注该类。
- 实现execute方法,完成业务功能
- 注册自定义规则
/**
* @desc 单据 审批提交规则
**/
@Slf4j
@Component("StockoutAffirmApplySubmitRule")
public class StockoutAffirmApplySubmitRule extends AbstractCommonRule {
@Override
public RuleExecuteResult execute(BillContext billContext, Map<String, Object> paramMap) throws Exception {
// 获取规则实体
List<BizObject> bills = this.getBills(billContext, paramMap);
// 定义返回值
RuleExecuteResult result = new RuleExecuteResult();
if( bills != null && bills.size() > 0){
BizObject bill = bills.get(0);
log.info("bill 的启用状态:{}", JSONObject.toJSONString(bill.get("enable")));
if( "0".equals(bill.get("enable")) ){
throw new BusinessException("停用的单据不能提交!!!");
}
}
return result;
}
}
4.动作上配置规则链
3.BizObject通用数据对象
BizObject内部统一使用map做数据结构;
重写get/set方法,避免字符串直接操作的数据错乱;
针对任何类型的属性,都可以获取。