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

一个好的 curd 代码生成器,应该长什么样

  •  
  •   vevlins ·
    vevlins · 2020-03-10 10:27:45 +08:00 · 4736 次点击
    这是一个创建于 1001 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用来 curd 的代码生成器有很多,我觉得有以下问题比较难解决:

    1. 很多业务逻辑需要在 curd 之外做一点修改,比如加一个参数校验,在完成后做一些后置操作,或者满足某种条件才可以进行,甚至于多表事务。很难预留出灵活的插口。

    2. 如果进行了一定程度的修改,再跑一次会覆盖掉修改的代码。其实我想表达的意思是这些修改后的代码往往就不再具备创建时的结构性的,不利于后续的拓展。

    你们有接触过比较好的工具吗,或者一些 web 框架自带 /第三方生成器也可以作为参考。

    30 条回复    2020-03-11 16:12:55 +08:00
    maichael
        1
    maichael  
       2020-03-10 10:39:16 +08:00
    人肉生成器
    vevlins
        2
    vevlins  
    OP
       2020-03-10 10:40:14 +08:00
    @maichael 只需要圈养几个码农,成本偏低😂
    zhaorunze
        3
    zhaorunze  
       2020-03-10 10:46:47 +08:00   ❤️ 1
    封装,借助 mybatis-plus,单表增删改查文件不需要新建,sql 语句不需要自己写
    lhx2008
        4
    lhx2008  
       2020-03-10 10:49:18 +08:00
    业务逻辑也能生成?如果楼主说的是 mybatis 那种,用个真正的 ORM 框架就可以了
    aaaafei
        5
    aaaafei  
       2020-03-10 10:57:10 +08:00
    一个鼻子,两个眼睛,一张嘴,两只手,大概像个人样
    vevlins
        6
    vevlins  
    OP
       2020-03-10 10:58:56 +08:00
    作为一个兼职做管理端后台的前端,没学过 java,现在都是用 go,看来从生态上 go 落后 java 好几个年代
    967182
        7
    967182  
       2020-03-10 11:04:04 +08:00
    能不能生成五彩斑斓的黑啊?不能就不算好 [狗头]
    ggicci
        8
    ggicci  
       2020-03-10 11:09:46 +08:00
    让产品经理写接口文档,然后从接口文档生成代码。
    codeloster
        9
    codeloster  
       2020-03-10 11:11:48 +08:00
    小爱同学,生成注册表单,详情参考某某网站
    baobao1270
        10
    baobao1270  
       2020-03-10 11:16:23 +08:00
    class BaseController{
    function Create(args){ Model.Create(args) }
    function Update(args){ Model.Update(args) }
    function Read(args){ Model.Read(args) }
    function Delete(args){ Model.Delete(args) }
    }

    (开个玩笑,别当真)
    chaoxuelei
        11
    chaoxuelei  
       2020-03-10 11:23:50 +08:00
    为什么要生成代码,直接生成接口不是很好么~~~~~taiwutech.com
    guxingke
        12
    guxingke  
       2020-03-10 11:25:23 +08:00
    生成的代码需要有扩展点 , 提供默认的扩展实现, 但是允许开发者扩展.

    func dosomething(args) {
    // pre hook
    doSomethingHook.preHook(args)

    {
    generate biz code.
    }

    // post hook
    doSomethingHook.postHook(args)
    }
    zjsxwc
        13
    zjsxwc  
       2020-03-10 11:26:21 +08:00
    参考各种语言的 web admin 框架
    ericls
        14
    ericls  
       2020-03-10 11:57:02 +08:00 via iPhone
    应该不生成代码。生成代码 你维护吗? 就算别人改了你也能维护吗?
    nl101531
        15
    nl101531  
       2020-03-10 12:18:53 +08:00
    我来帮你写个 JB 插件吧。。。话说有的话,你愿意付费吗?
    lululau
        16
    lululau  
       2020-03-10 12:24:02 +08:00
    Rails ActiveRecord 这样的吧
    vevlins
        17
    vevlins  
    OP
       2020-03-10 12:27:01 +08:00
    @nl101531 不愿意,本来就是想通过写一个或者研究一个提升自己的能力,花钱买来干啥
    liukangxu
        18
    liukangxu  
       2020-03-10 14:47:59 +08:00
    Bond -> Logic -> Service

    在 Bond 中用注释控制是否生成对应 CURD Logic 和 Service
    lidashuang
        19
    lidashuang  
       2020-03-10 14:56:06 +08:00
    rails
    passerbytiny
        20
    passerbytiny  
       2020-03-10 15:01:56 +08:00
    curd 生成器无所谓好坏,因为它总是坏的,原因你自己都分析出来了。

    curd 生成器并不是 Java 的亮点,而是污点,不要羡慕。
    jzmws
        21
    jzmws  
       2020-03-10 15:11:56 +08:00
    这个没有好坏的, 只有改到适合自己的 . 这个拿来主义是不现实的!
    DelayNoMay
        22
    DelayNoMay  
       2020-03-10 16:01:21 +08:00
    未来人工智能写代码,靠你了
    dany813
        23
    dany813  
       2020-03-10 16:15:49 +08:00
    确实没特别好用的
    hnbcinfo
        24
    hnbcinfo  
       2020-03-10 16:54:43 +08:00
    C#开发语言的话,可以使用 T4 模板。
    myidea
        25
    myidea  
       2020-03-10 18:47:19 +08:00
    试一下 [diboot devtools]( https://github.com/dibo-software/diboot-v2) 吧,基础代码可以灵活扩展,生成代码不会覆盖你的自定义代码。
    msg7086
        26
    msg7086  
       2020-03-11 08:16:36 +08:00
    遇事不决看看 Rails。
    wuhhhh
        27
    wuhhhh  
       2020-03-11 11:47:07 +08:00
    Michaelssss
        28
    Michaelssss  
       2020-03-11 12:17:06 +08:00 via Android
    6000 一个月,六线城市找个码农
    bnm965321
        29
    bnm965321  
       2020-03-11 15:00:30 +08:00
    Django Rest Framework

    OO 编程教科书
    purensong
        30
    purensong  
       2020-03-11 16:12:55 +08:00
    作为一个 java 开发,说下自己的体会。
    我一般习惯用 mybatis-generator 插件生成 dao,官方的确实需要修改才能满足需求,我一般统一改成 crud 的样子是三个方法
    selective(Object o); save(Object o); delete(Object o);
    在写 SQL 的时候,把全部参数的判断都加上,不为空就加上,在使用的时候都是对象传入。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3716 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 04:35 · PVG 12:35 · LAX 20:35 · JFK 23:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.