有用 Groovy 做业务开发的吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fuye
V2EX    Java

有用 Groovy 做业务开发的吗

  •  
  •   fuye 2018-09-27 09:36:06 +08:00 7789 次点击
    这是一个创建于 2576 天前的主题,其中的信息可能已经有所发展或是发生改变。

    尝试了几个业务开发,真的是很快,语法糖也封装的很简洁。

    如 集合类 def list =[{a:1,b:2},{a:2,b:1}]

    list.sort{[it.a,it.b]} //按 a,b 排序

    list.collectEntries{[it.a,it.b]} //a 的 value 作为 key,b 的 value 作为 value

    list.groupBy{it.a} //a 分组

    。。。还有其他如 map、filter、find、any、every 等函数简直不要太舒服

    p>IO 类处理起来也特别简单; Sql 也很强大; 反射也很好用; 单元测试就不用说了; 也能轻松的扩展一个类的方法; 文档也很清晰;

    整个开发下来,加班没有了,bug 也少了,不知道为嘛,感觉用 groovy 来开发业务的好像不多?是不是只用来写单元测试或动态规则配置啥的。

    30 条回复    2018-11-02 13:05:28 +08:00
    tinybaby365
        1
    tinybaby365  
       2018-09-27 09:57:56 +08:00
    相似地位的 Scala 没有侵蚀 Java 的存在,却在 Spark 里面有一席之地,kafka 也是用 Scala 写的。Groovy 已经经由 gradle 体现了价值。Groovy 其他发扬光大的地方,因为工作领域的原因真没发现。

    JVM 系非 Java 的招人难度大,这是和 Java 比最大的劣势。你说你开发效率高,执行效率和 Java 一样,但招不到开发,白说。
    jiafaner
        2
    jiafaner  
       2018-09-27 10:01:15 +08:00   2
    能行的

    我们给客户做的一个数据管理系统是用 Java 写的,然后用 groovy 提供了一个用户接口,用户能够用 groovy 写一点小东西直接嵌入

    用户都说我们做得好,不过老板对用户吹的是我们自己写的 DSL,嘿嘿嘿
    ghos
        3
    ghos  
       2018-09-27 10:55:12 +08:00 via Android
    @jiafaner java 怎么和 groovy 组合一起用啊 求教
    PythonAnswer
        4
    PythonAnswer  
       2018-09-27 11:03:15 +08:00 via iPhone
    2 楼老板人才
    fuye
        5
    fuye  
    OP
       2018-09-27 11:12:16 +08:00
    @tinybaby365 如果是从团队的角度来看,选一门招人不方便的语言的确不太合适,用 JAVA 招人方便
    CFO
        6
    CFO  
       2018-09-27 11:14:05 +08:00 via Android
    在用 不过用的简单 只是用来算公式
    Resource
        7
    Resource   2018-09-27 11:14:08 +08:00
    纯 groovy 没有,某些场景当脚本用
    Resource
        8
    Resource  
       2018-09-27 11:15:12 +08:00
    只能说动态一时爽,
    fuye
        9
    fuye  
    OP
       2018-09-27 11:15:38 +08:00
    @ghos 目前了解的有两种做法,一种就是通过 maven 的 groovy-compile 插件直接编译成字节码,另一种就是动态解析执行 groovy 脚本,可以传入当前程序的上下文进行 binding,网上教程很多的
    zhuangzhuang1988
        10
    zhuangzhuang1988  
       2018-09-27 11:19:33 +08:00
    用动态语言等死吧.
    Resource
        11
    Resource  
       2018-09-27 11:19:58 +08:00
    另外,groovy 的性能比较低,很多地方并不适用
    jiafaner
        12
    jiafaner  
       2018-09-27 11:20:20 +08:00
    @ghos 就是动态执行 groovy 脚本的,很多教程的
    leconio
        13
    leconio  
       2018-09-27 11:30:38 +08:00 via Android
    kotlin 瑟瑟发抖
    fuye
        14
    fuye  
    OP
       2018-09-27 11:31:11 +08:00
    @Resource 性能的确会有些影响,但是日常的 CURD 业务性能瓶颈主要是在网络、DB 这块,所以整体性能也不会差太多
    Resource
        15
    Resource  
       2018-09-27 11:34:10 +08:00
    @fuye 所以说做些业务简单的还行,大型的复杂系统还是上不了台面
    fuye
        16
    fuye  
    OP
       2018-09-27 11:46:52 +08:00
    用简单 ab 测试的结果来看的话,我写的大部分普通 groovy 接口(包含<5 个 rest 调用+<5 个 DB 调用+<5 个 redis 调用) 比纯 java 写的慢了 <5ms,主要耗时的都在外部调用上。但是如果是计算型的接口,有的能慢<100ms.不过整体上这点损耗都是可以接受的
    fuye
        17
    fuye  
    OP
       2018-09-27 11:48:09 +08:00
    我这个都是静态编译的,如果是动态解析执行就会慢的比较多
    xcstream
        18
    xcstream  
       2018-09-27 12:11:18 +08:00
    node 用的人更多。
    Dainslef
        19
    Dainslef  
       2018-09-27 12:56:01 +08:00   1
    Groovy 是动态语言,写写小脚本尚可,在 JVM 系的主战场后端服务这块其实并没有多大优势,在后端服务这块静态类型语言是工程上的首选。
    而且 JVM 上好语言太多啦,Scala 有强大的类型系统和高阶 FP 特性,Kotlin 有各类精心设计的语法糖和强类型 DSL,哪个不比 Groovy 设计的更优秀。
    而且 Groovy 的尴尬在于没有真正的 Killer 级别应用,Scala 有 Spark/Akka,Kotlin 更专注 Android 平台,在各自的细分领域都有巨大的优势,Groovy 真正广泛应用的只有 Gradle,但这货也不是框架 /库;至于 Grails 什么的也是小众框架,不成气候。
    axb
        20
    axb  
       2018-09-27 13:28:15 +08:00
    我们有一个系统用了纯 groovy 写,后来发现动态语言开发一时爽……
    现在是 java+groovy 混合编程了
    sagaxu
        21
    sagaxu  
       2018-09-27 13:32:22 +08:00 via Android
    你说的这些 kotlin 都有,还是静态类型
    viakiba
        22
    viakiba  
       2018-09-27 14:21:06 +08:00
    @ghos BSF 引擎好像可以
    fuye
        23
    fuye  
    OP
       2018-09-27 14:37:12 +08:00
    @sagaxu 是的,这些 kotlin 也都有,而且 IDEA 支持上对 kotlin 更友好。不过个人感觉 groovy 的语法对 javaer 更加友好?目前用在一些内部业务型项目是 OK 的,如果是大型项目或者稳定的平台、服务层项目,从团队招聘成本、学习成本和技术风险上来看,可能还是会老老实实选择 JAVA 作为第一语言,其他作为一些辅助
    flyingghost
        24
    flyingghost  
       2018-09-27 16:53:04 +08:00
    JVM 系开发 DSL,groovy 简直爽歪。
    wancaibida
        25
    wancaibida  
       2018-09-27 17:01:08 +08:00
    一般 groovy+grails.闭包,GORM 用起来是爽,但动态语言坑起来也很爽啊.
    aristotll
        26
    aristotll  
       2018-09-27 19:00:57 +08:00
    @Resource #11 groovy 可以用 compileStatic 来增加性能 ,
    aristotll
        27
    aristotll  
       2018-09-27 19:01:56 +08:00
    个人比较喜欢 groovy 当脚本用 调用 Java 相关的库也很方便
    lowzoom
        28
    lowzoom  
       2018-09-28 01:03:25 +08:00
    除了业务本身其他都上 groovy
    orm
        29
    orm  
       2018-09-28 11:57:11 +08:00
    公司一个产品在用,grails 框架,语言是 groovy
    jeffreyning
        30
    jeffreyning  
       2018-11-02 13:05:28 +08:00
    公司在用 groovy 结合 springboot 开发,效率很高。接口层用的都是 springboot、springmvc 和 springcloud 的注解,业务实现用的 groovy 写速度快还支持热部署,没有用 grails 框架,用的这个 groovy 框架 micro-mvc,比 grails 胜在兼容性强,兼容 spring 体系各种 mvc 框架。
    https://github.com/jeffreyning/micro-mvc
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5372 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:57 PVG 14:57 LAX 23:57 JFK 02:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86