Foxnic-Web 代码生成 (9) —— 文件笼罩与扩大
概述
之前的文档中咱们曾多次提及,Foxnic 的代码生成是迭代式的,当表构造变动后,须要从新生成相干的代码。例如某表减少了一个字段,那么对应的表构造元数据须要从新生成。此外,为了保护新加的字段也须要从新生成模块代码。
这个时候,如果模块代码曾经被开发人员批改,默认状况下,从新生成代码会笼罩开发人员批改过的代码。为了可能重复生成大多数的模块代码 Foxnic 设计了一套机制,尽可将影响降到最低。
本文中的示例代码均可在 https://gitee.com/LeeFJ/foxni… 我的项目中找到,本文对照 webfull 我的项目解说。
残缺示例
Foxnic-Web 我的项目提供代码生成的残缺示例,请大家参考:
https://gitee.com/LeeFJ/foxni…
配置笼罩模式
咱们曾经理解,代码生成时会生成一些列文件,一旦这些文件被批改,就不能够从新生成。代码生成配置类为开发人员提供了 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 文件的扩大机制。
相干我的项目
https://gitee.com/LeeFJ/foxnic
https://gitee.com/LeeFJ/foxni…
https://gitee.com/lank/eam
https://gitee.com/LeeFJ/foxni…
官网文档
http://foxnicweb.com/docs/doc…