从模板到代码:通用代码生成器“光船尝鲜版”与蛋糕船示例实践

2026-08-27 38 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:11 分钟

通用代码生成器“光船”发布了尝鲜版,并配套提供介绍视频。这个版本的重点不只是展示生成结果,而是继续打磨生成过程中的细节:统一使用 EasyUI 的 FileBox 作为代码生成物的上传控件,优化图片功能、哑数据模式和警告处理,同时加入更多测试并修复已发现的问题。

视频演示采用 xlsx 格式的 SGS2 模板,以“蛋糕船”示例展示从模板、数据到源码生成的完整过程。对于正在维护后台系统、表单页面或数据管理模块的开发者来说,这类工具的价值在于把重复的页面结构和代码组织方式固化下来,让新增业务更多变成配置和模板调整。

这次尝鲜版关注了什么

统一上传控件

生成器统一使用 EasyUI 的 FileBox 处理代码生成物上传。统一控件的意义在于减少不同页面之间的交互差异,也便于集中处理文件选择、上传参数、回调和错误提示。

可以这样实践一个最小的 EasyUI 上传控件。运行前请将 upload.php 替换为项目实际的上传接口,并确认接口能够处理 file 字段:

<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <link rel="stylesheet" href="jquery-easyui/themes/default/easyui.css">
  <link rel="stylesheet" href="jquery-easyui/themes/icon.css">
  <script src="jquery-easyui/jquery.min.js"></script>
  <script src="jquery-easyui/jquery.easyui.min.js"></script>
</head>
<body>
  <input id="generatedFile" name="file" class="easyui-filebox"
         data-options="
           buttonText:'选择生成物',
           prompt:'请选择文件',
           accept:'.zip,.xlsx,.json',
           onChange:function(newValue){
             if (newValue) {
               $('#uploadForm').submit();
             }
           }">

  <form id="uploadForm" action="upload.php" method="post"
        enctype="multipart/form-data" style="display:none">
    <input name="file" type="file">
  </form>

  <script>
    // 实际项目中建议在提交前检查扩展名、大小和登录状态。
    $('#uploadForm').on('submit', function () {
      return $('#generatedFile').filebox('getValue') !== '';
    });
  </script>
</body>
</html>

上面的代码只是可改造的最小示例。生产环境还需要在服务端重新校验文件类型和大小,不能只依赖浏览器的 accept 属性。对于生成器而言,上传控件还应明确区分模板文件、图片资源和最终生成包,避免用户误传文件后才在生成阶段发现问题。

图片、哑数据与警告

代码生成器经常遇到三类容易被忽略的细节:

  • 图片字段是否能够正确映射到生成后的表单和数据结构。
  • 没有接入真实数据库时,是否可以使用哑数据完成页面预览和流程测试。
  • 模板中存在可接受的缺省值或未使用字段时,工具是否会输出大量难以判断的警告。

摘要中提到的优化,说明尝鲜版不仅关注“能不能生成”,也在关注生成结果是否便于继续开发。哑数据模式尤其适合早期验证:开发者可以先确认列表、详情、编辑和图片展示的结构,再接入真实数据源。

xlsx 模板为什么值得关注

视频演示使用 xlsx 格式的 SGS2 模板。把模板放在表格文件中,通常更适合描述字段、页面区域、数据类型和生成规则,因为业务人员、产品人员和开发者都能直接查看和修改表格内容。

不过,表格模板也带来几个工程约束:

  1. 工作表名称和列名需要稳定,否则生成器难以可靠识别规则。
  2. 空行、合并单元格和隐藏列可能改变解析结果,模板应尽量保持结构清晰。
  3. 模板需要版本管理,不能只依赖本地文件名判断兼容性。
  4. 生成器应在解析阶段报告具体的工作表、行号和字段名,而不是只显示“模板错误”。

如果要为模板增加一个简单的版本检查,可以在生成前约定元数据区域。例如,假设 SGS2 工作表的 A1 存放模板版本,下面的 Python 代码可以在生成前完成检查:

from pathlib import Path
from openpyxl import load_workbook


def check_sgs2_template(filename: str, expected_version: str = "SGS2") -> None:
    path = Path(filename)
    if not path.is_file():
        raise FileNotFoundError(f"模板不存在: {path}")
    if path.suffix.lower() != ".xlsx":
        raise ValueError("模板必须是 .xlsx 文件")

    workbook = load_workbook(path, read_only=True, data_only=True)
    if "SGS2" not in workbook.sheetnames:
        raise ValueError("模板缺少 SGS2 工作表")

    sheet = workbook["SGS2"]
    actual_version = sheet["A1"].value
    if actual_version != expected_version:
        raise ValueError(
            f"模板版本不匹配: expected={expected_version}, actual={actual_version!r}"
        )


if __name__ == "__main__":
    # 将 cake-boat.xlsx 替换为实际模板路径。
    check_sgs2_template("cake-boat.xlsx")
    print("SGS2 模板检查通过,可以进入代码生成阶段")

运行前安装依赖:

python -m pip install openpyxl
python check_template.py

这段代码不代表“光船”内部的实现方式,而是一个可以放在生成流水线前面的模板校验示例。它把错误尽量提前到输入阶段,避免生成半成品后才定位问题。

用“蛋糕船”示例验证生成链路

“蛋糕船”示例的价值在于,它把抽象的代码生成过程变成了一个可以观察的样例。实际验证时,可以把流程拆成四个检查点:

  • 模板检查:确认文件格式、工作表和关键字段存在。
  • 数据检查:确认字段类型、图片字段和哑数据能够被解析。
  • 生成检查:确认输出目录、文件名和目录结构符合预期。
  • 运行检查:启动生成后的项目,检查上传、图片展示和基础页面交互。

可以使用一个简单的命令约定来固定生成流程。下面的命令是示意写法,请根据实际生成器的命令行参数调整:

set -e

TEMPLATE="cake-boat.xlsx"
OUTPUT="build/cake-boat"

python check_template.py "$TEMPLATE"
mkdir -p "$OUTPUT"

# 示例参数:实际工具可能使用不同的命令和选项。
lightship generate \
  --template "$TEMPLATE" \
  --mode dummy \
  --output "$OUTPUT" \
  --images ./assets/images

find "$OUTPUT" -maxdepth 2 -type f | sort

这里的 dummy 模式适合生成器的早期验收,但不应被当作真实业务数据测试的替代品。接入数据库、权限系统和文件存储后,还需要补充接口鉴权、异常上传、重复文件名、图片删除和大文件处理等测试。

采用前的检查清单

尝鲜版适合用来验证生成器的方向和模板设计。落地到团队项目时,可以保留一份小型回归样例,每次修改模板或生成规则都重新生成并比较结果。

建议至少检查以下内容:

  • 是否统一了上传控件和上传接口的字段命名。
  • 图片字段在列表、详情和编辑页面中的表现是否一致。
  • 哑数据能否覆盖空列表、单条数据和多图片等边界情况。
  • 警告是否包含文件、工作表、行号和字段名。
  • xlsx 模板是否纳入版本控制,并有明确的兼容范围。
  • 生成结果是否可以通过自动化测试启动和访问。
  • 真实环境中是否重新校验上传文件,而不是信任前端扩展名。

代码生成器最适合处理稳定、重复且规则明确的部分。对于高度定制的业务流程,生成结果仍需要人工审查。以 SGS2 模板和蛋糕船示例建立一条可重复的生成、运行、测试链路,通常比一次性追求复杂模板更容易维护,也更容易发现模板演进带来的回归问题。


相关推荐