V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coderstory
V2EX  ›  Java

Java 有没有优雅的办法生成类代码

  •  
  •   coderstory · 56 天前 · 1938 次点击
    这是一个创建于 56 天前的主题,其中的信息可能已经有所发展或是发生改变。

    现在有个 OA 系统,包含一套流程设计,比如可以设计一个请假流程,包含基本的节点,连接线,条件,switch 等功能。包含了访问数据库,访问 URL 等能力。

    现在有个需求,设计好对的流程,不通过内置的简单版的流程引擎执行。而是需要把设计好的流程转成对应的 java 实现,也就是生成流程设计对应的 java 文件。最终流程执行的是 java 文件生成的 class 文件。

    现在碰到了第一个问题,如何优化的生成流程对应的类。不知都有没有什么设计模式或者什么插件,可以快速方便的生成流程的 java 源码. 如果直接使用字符串拼接的方式,我感觉会有点凌乱,出问题了也不好处理,也不灵活。写出来的代码估计自己都看不懂。

    谢过各位大佬了。

    19 条回复    2021-08-03 20:49:37 +08:00
    a22271001
        1
    a22271001   56 天前
    用模板引擎,比如 freemark
    securityCoding
        2
    securityCoding   56 天前
    模版引擎? Velocity 、Thymeleaf 看看这两个
    GuuJiang
        3
    GuuJiang   56 天前 via iPhone
    我相信你需要的是 CodeModel,你生成的是 AST,它负责输出代码,完全满足你的要求
    Brentwans
        4
    Brentwans   56 天前
    一定要生成代码才能解决吗?生成的代码可不好维护呀
    ic2y
        5
    ic2y   56 天前
    @coderstory 感觉跟这个比较相关; https://gitee.com/mirrors/compileflow
    sheeta
        6
    sheeta   56 天前
    建议使用流程引擎
    pigbug
        7
    pigbug   56 天前
    我看了一下 另类的 spring boot 代码生成。github.com/spring-io/start.spring.io
    wsxyeah
        8
    wsxyeah   56 天前 via iPhone
    javapoet
    zoharSoul
        9
    zoharSoul   56 天前
    square 有一个 JavaPoet
    e583409
        10
    e583409   56 天前
    @wsxyeah 这个很厉害 回头研究一下 一些业务代码就可以 自动生成了
    jack778
        11
    jack778   56 天前
    天呐,一个流程就几个类,一百个流程几百个类? 确认不考虑维护成本吗
    coderstory
        12
    coderstory   56 天前
    @jack778 流程设计还是单独保存的。。。每次修改重新生成
    coderstory
        13
    coderstory   56 天前   ❤️ 1
    @sheeta 都说了本身就有引擎。。。。但人家不要
    coderstory
        14
    coderstory   56 天前
    @Brentwans 那就不关我们部门的事情了 哈哈哈
    coderstory
        15
    coderstory   56 天前
    @GuuJiang 啧啧 这个东西的确不错 就是原项目已经弃坑了 还好还有人 fork 出来重新维护
    dallaslu
        16
    dallaslu   56 天前
    与其如此,不如设计一个流程描述文件,写个通用类去解析、执行流程。
    Cbdy
        17
    Cbdy   55 天前 via Android
    建议不要生成类,而是直接生成字节码,生成类的话可能会不小心改坏掉,而且每次重新生成会产生大量代码变动,不利于维护
    hdfg159
        18
    hdfg159   53 天前 via Android
    groovy 语言,生成脚本,动态执行
    liian2019
        19
    liian2019   49 天前
    javapoet + asm
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3565 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 09:30 · PVG 17:30 · LAX 02:30 · JFK 05:30
    ♥ Do have faith in what you're doing.