Foxnic-Web 代码生成 (4) —— shadow 方法的应用

Foxnic-Web 代码生成 (4) —— shadow 方法的应用

        本文探讨的是在 FoxnicWeb 实体模型生成时,配置枚举属性与逻辑值属性。

配置枚举属性映射

        通过 shadow 方法为属性对应枚举,并同步生成get、set 方法。

        例如,在 bpm_process_definition_node 表的 node_type(节点类型) 字段,节点类型可选值包括: StartEvent、UserTask、SequenceFlow、EndEvent。那么可以先将他们定义为枚举,如下所示:

/**
* Camunda 流程节点类型
* */
public enum CamundaNodeType implements CodeTextEnum {

    START_NODE("起始节点","StartEvent"),
    USER_TASK("人工任务","UserTask"),
    SEQUENCE_FLOW("单一流向","SequenceFlow"),
    /**
    * 不涉及,跳过审批
    * */
    END_EVENT("结束节点","EndEvent");

    private String text;
    private String code;
    private CamundaNodeType(String text,String code) {
        this.text=text;
        this.code=code;
    }

    public String code() {
        return this.code;
    }

    public String text() {
        return text;
    }

    public static CamundaNodeType parseByCode(String code) {
        return (CamundaNodeType) EnumUtil.parseByCode(CamundaNodeType.values(),code);
    }

}

        在配置模型生成的代码中加入 shandow 方法配置,如下所示:

@Override
public void configModel(PoClassFile poType, VoClassFile voType) {
    voType.addSimpleProperty(String.class,"assigneeInfo","选择的审批人信息","选择的审批人信息");
    poType.addListProperty(ProcessDefinitionNodeAssignee.class,"assignees","审批人清单","审批人清单");
    // 将属性映射为枚举,将 bpm_process_definition_node 的 node_type 射为 CamundaNodeType 枚举类型
    poType.shadow(BPM_PROCESS_DEFINITION_NODE.NODE_TYPE, CamundaNodeType.class);
}

        生成的实体代码入下,nodeType属性多了两个枚举类型的get、set 方法,此时 getNodeType 与 getNodeTypeEnum 的效果是一样的,只是返回值类型不同;setNodeType 与 setNodeTypeEnum 方法的效果也是一样 的,只是入参不同。

        在使用实体对象时,可以这样写代码:

ProcessDefinitionNode sample = new ProcessDefinitionNode();
// 可以这样设置值,设置枚举值,不必设置字符串值
sample.setNodeTypeEnum(CamundaNodeType.END_EVENT);
// 可以这样获取值,并比较,不必在用字符串做比较
if(sample.getNodeTypeEnum()==CamundaNodeType.START_NODE) {
    //TODO 做你想做的
}

配置逻辑属性映射

        通过 shadowBoolean 方法为属性对应为逻辑值,并同步生成 isXXX、setXXX 方法。

        例如,在 BPM_PROCESS_DEFINITION_FILE 表中有个 ACTIVATED(是否激活) 字段,在实体代码生成时,可以做如下配置:

public void configModel(PoClassFile poType, VoClassFile voType) {
poType.addSimpleProperty(User.class,"lastUpdateUser","最后修改人","最后修改人");
// 映射逻辑值
poType.shadowBoolean(BPM_PROCESS_DEFINITION_FILE.ACTIVATED);
poType.addListProperty(ProcessDefinitionNode.class,"nodes","审批节点清单","审批节点清单");
}

        生成实体类方法如下,此时的 getActivated 和 isActivated 等价,只是返回的值类型不同;setActivated 方法做了重载,传入不同类型的值。

        至于在 setActivated(Boolean activatedBool) 这个方法逻辑值对应的是 1/0 还是 T/F 或 Yes/No 可以在 DBTreaty 中定义,每个DAO对应一个 DBTreaty ,配置数据库规约。代码片段如下:

DBTreaty dbTreaty=new DBTreaty();

// 设置 false 对应的数据库值
dbTreaty.setFalseValue(0);
// 设置 true 对应的数据库值
dbTreaty.setTrueValue(1);

        在使用实体对象时,可以这样写代码:

ProcessDefinitionFile sample = new ProcessDefinitionFile();
// 值接设置逻辑值,而非具体数据库要存储的值,底层负责转换
sample.setActivated(true);
// 获取值,并比较,最层自行转换为逻辑值
if(sample.isActivated()) {
// TODO 做你想做的
}

总结

        shandow方法和shandowBoolean方法的目的就是避免直接的值比较,把属性处理成等价的枚举和逻辑值,代码更加简洁。

相关项目:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值