Foxnic-Web 代码生成 (9) —— 文件覆盖与扩展

Foxnic的代码生成是迭代式的,当表结构变化时会重新生成代码。如果代码已被修改,默认会覆盖。通过配置覆盖模式如`WriteMode`,可以选择避免覆盖或生成临时文件。此外,通过添加`@version`标记可防止文件被覆盖,同时使用扩展文件如`.ext.js`进行业务逻辑扩展,以保持代码可重生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Foxnic-Web 代码生成 (9) —— 文件覆盖与扩展

概述

        之前的文档中我们曾多次提及,Foxnic 的代码生成是迭代式的,当表结构变化后,需要重新生成相关的代码。例如某表增加了一个字段,那么对应的表结构元数据需要重新生成。此外,为了维护新加的字段也需要重新生成模块代码。

        这个时候,如果模块代码已经被开发人员修改,默认情况下,重新生成代码会覆盖开发人员修改过的代码。为了能够反复生成大多数的模块代码 Foxnic 设计了一套机制,尽可将影响降到最低。

        本文中的示例代码均可在 foxnic-samples: 用于展示和提供 Foxnic 相关的示例工程和代码 项目中找到,本文对照 webfull 项目讲解。

完整示例

        Foxnic-Web 项目提供代码生成的完整示例,请大家参考:

common/generator/src/main/java/org/github/foxnic/web/generator/module/example/CodeExampleConfig.java · LeeFJ/foxnic-web - Gitee.com

配置覆盖模式

        我们已经了解,代码生成时会生成一些列文件,一旦这些文件被修改,就不可以重新生成。代码生成配置类为开发人员提供了 configOverrides 方法,用于确定每组文件的写入模式。示例代码如下:

@Override
public void configOverrides() {
    //文件生成覆盖模式
    context.overrides()
        .setServiceIntfAnfImpl(WriteMode.COVER_EXISTS_FILE) //服务与接口
        .setControllerAndAgent(WriteMode.COVER_EXISTS_FILE) //Rest
        .setPageController(WriteMode.COVER_EXISTS_FILE) //页面控制器
        .setFormPage(WriteMode.COVER_EXISTS_FILE) //表单HTML页
        .setListPage(WriteMode.COVER_EXISTS_FILE) //列表HTML页
        .setExtendJsFile(WriteMode.CREATE_IF_NOT_EXISTS); // 扩展文件
}

        上面的代码为每组代码文件制定了写入模式,写入模式(WriteMode)包含若干选项:

选项

说明

WRITE_TEMP_FILE

如果文件已经存在,在边上生成一个 .code 文件

COVER_EXISTS_FILE

如果文件已经存在,直接覆盖原始文件;不存在就创建

CREATE_IF_NOT_EXISTS

如果文件不存在则创建,如果已存在就不处理

IGNORE

完全忽略,不做生成任何代码

        如果代码已经修改,我们可以考虑使用 WRITE_TEMP_FILE 或 IGNORE 模式。WRITE_TEMP_FILE 会在目标文件边上生成一个与目标文件同名的 .code 文件,可以将 .code 文件中的内容拷贝到已修改的源文件中。

文件覆盖标记

        实际的使用中,使用 configOverrides 方法配置源代码的写入模式还是会显的比较麻烦。如果代码生成工具可以自己识别代码是否已经被开发人员修改,这样就会更加方便。智能识别似乎有些困难,但是开发人员可以在文件修改后直接在文件加入一个标记,代码生成工具识别到这个标记时就不会重新生成改文件。

        在项目中,我们使用 @version 来作为文件已修改的标记,如图所示,在 Java 中可以这样:

        在 Js 文件中可以这样:

        在 Html 文件中可以这样:

逻辑扩展

        Foxnic 代码生成的原则是让开发人员尽量不修改生成的代码文件,但是业务逻辑的调整又无法回避,那么如何才能调和两者的矛盾呢?

        Foxnic-Web 通过业务逻辑扩展文件 xxx_ext.js 文件来解决前端代码修改的问题。针对后端代码,直接修改,尚未有这样的逻辑扩展文件。

        开发人员可以为 xxx_ext.js 文件加入 @version 标记,使 xxx_ext.js 文件不再被覆盖。xxx_ext.js 中包含了 form 和 list 两个对象,并且内置了诸多回调方法,开发人员可以将业务逻辑写入这些回调方法中,而不必去修改另外4个前端页面。这样另外四个前端页面就可以反复刷新代码。

        xxx_ext.js 文件如何使用,我们此处不做展开,后续章节专门对其进行深入探讨。

小结

        本节主介绍了代码生成的覆盖模式,覆盖模式作用域多个文件组成的代码组。为了方便起见,也可以在源码文件中加入 @version 标记使文件免于覆盖。另外,为了尽可能反复生成代码,我们引入了 xxx_ext.js 文件的扩展机制。

相关项目

foxnic: Foxnic基础框架,开发工具。

foxnic-web: FoxnicWeb是一个应用开发框架,高效、快速、稳定。

Foxnic-EAM固定设备资产管理系统: EAM固定资产设备管理系统,满足中小企业基本需求,对常用资产设备进行信息化管理,包含自定义支持各类设备、自带导入导出、维护工作统计、采购管理、文档管理、合同管理等功能

foxnic-samples: 用于展示和提供 Foxnic 相关的示例工程和代码

官方文档

Foxnic 开发文档 - 入门指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值