当前位置: 首页 > 后端技术 > Java

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

时间:2023-04-01 23:32:17 Java

Foxnic-Web代码生成(九)——文件覆盖和扩展概述我们在之前的文档中多次提到,Foxnic的代码生成是迭代的,当表结构更改,需要重新生成相关代码。比如在表中增加了一个字段,需要重新生成对应的表结构元数据。此外,为了维护新添加的字段,需要重新生成模块代码。此时,如果模块代码已经被开发者修改过,默认情况下,重新生成的代码会覆盖开发者修改过的代码。为了能够重复生成大部分模块代码,Foxnic设计了一种机制来将影响降到最低。本文的示例代码可以在https://gitee.com/LeeFJ/foxni...项目中找到,本文结合webfull项目进行说明。完整示例Foxnic-Web项目提供了代码生成的完整示例,请参考:https://gitee.com/LeeFJ/foxni...配置覆盖模式我们了解到代码生成时会生成一系列文件.这些文件一旦被修改,就无法重新生成。代码生成配置类为开发者提供了一个configOverrides方法来决定每组文件的写入模式。示例代码如下:@OverridepublicvoidconfigOverrides(){//文件生成覆盖模式context.overrides().setServiceIntfAnfImpl(WriteMode.COVER_EXISTS_FILE)//服务和接口.setControllerAndAgent(WriteMode.COVER_EXISTS_FILE)//Rest.setPageController(WriteMode.COVER_EXISTS_FILE)//pagecontroller.setFormPage(WriteMode.COVER_EXISTS_FILE)//表单HTMLpage.setListPage(WriteMode.COVER_EXISTS_FILE)//列表HTMLpage.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文件中的内容复制到修改后的源文件中。FileOverrideMark在实际使用中,使用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/foxnichttps://gitee.com/LeeFJ/foxni...https://gitee.com/lank/eamhttps://gitee.com/LeeFJ/foxni。..官方文档http://foxnicweb.com/docs/doc…