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

工作中需要维护一个 JFinal 项目,太他妈痛苦了

  •  1
     
  •   GM · 2022-01-20 13:07:00 +08:00 · 5719 次点击
    这是一个创建于 1031 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个所谓“轻、快”的框架,各种基础设施除了简陋就是简陋,从而导致了业务层代码也是各种随便就来,各种 Map 到处传,各种 record (实际上也是个 Map 的简单包装)到处传,各种全局函数到处调用,写的时候是轻松了,维护的时候,要多恶心有多恶心。

    太恶心了

    32 条回复    2022-01-24 13:34:17 +08:00
    billly
        1
    billly  
       2022-01-20 13:09:55 +08:00   ❤️ 4
    这框架还一堆粉丝呢
    littlewing
        2
    littlewing  
       2022-01-20 13:13:39 +08:00
    不是框架的问题,而是写代码的人的问题,并不是因为简陋,写代码就一定要乱来啊
    PDX
        3
    PDX  
       2022-01-20 13:14:00 +08:00   ❤️ 1
    这个框架官网主页太丑了,所以我都不愿意去细看。。。
    WhoMercy
        4
    WhoMercy  
       2022-01-20 13:17:47 +08:00   ❤️ 2
    轻+快 = 耦合
    offswitch
        5
    offswitch  
       2022-01-20 14:18:28 +08:00
    跟我一样,当初第一次接触这个框架,贼 tmd 难受,之前写的人各种炫技,搞得贼恶心。
    hidemyself
        6
    hidemyself  
       2022-01-20 14:24:08 +08:00   ❤️ 1
    JFinal 这种快速开发的框架,追求的就是快,一锤子买卖,不用考虑维护的
    urzz
        7
    urzz  
       2022-01-20 14:28:23 +08:00   ❤️ 1
    公司技术框架定位 JFinal ,就贼恐怖= =

    不维护是不可能的,无论是功能迭代还是 bug 修复,都是省不了的。改的时候就看前人写不写文档了,不然遍地的 record 真想死
    GM
        8
    GM  
    OP
       2022-01-20 16:20:23 +08:00   ❤️ 1
    @littlewing 框架定位就是这样,提供的各种接口都是明的暗的诱导你:“直接用 record 、直接用 map 、不要什么 vo 、dto 的”,你想不乱来?实际上就是要违背框架的各种约定,反正左右难受。
    cheng6563
        9
    cheng6563  
       2022-01-20 16:53:26 +08:00   ❤️ 1
    @littlewing 这框架就是让你把 Java 当弱类型动态语言用,结果就是两边的优势都沾不上而两边的劣势都沾一身。
    wizzer
        10
    wizzer  
       2022-01-20 17:43:13 +08:00
    tagtag
        11
    tagtag  
       2022-01-20 17:52:46 +08:00
    跟 PHP 的道理一样,看似简单,反而对编码人要求很高
    Konys
        12
    Konys  
       2022-01-20 17:55:07 +08:00   ❤️ 2
    同感,2019 年维护过一个 jfinal 项目,前一个写的人一个项目就两个 controller 文件,每个 controller 大约 6000 行左右,所有的业务都在 controller 中完成,当时直接蒙了,编译出来的 class 文件都 7M 多
    retrocode
        13
    retrocode  
       2022-01-20 19:01:48 +08:00
    这种项目一般跟框架没关系,和写代码的人有关系,我才接手了一个 springboot 的项目,同样恶心,直接在 sql 结果里拼接 html 返回,不知道之前哪个老哥的奇葩操作
    GM
        14
    GM  
    OP
       2022-01-20 19:19:56 +08:00
    @retrocode
    很有关系。
    框架本身就是自己到处用各种 map 、各种全局变量全局函数,本身就是在暗示使用者“你也应该这么做”,框架使用者很容易就不自觉的也跟着这么用了。
    sagaxu
        15
    sagaxu  
       2022-01-20 20:26:49 +08:00 via Android
    极速
    妙不可言
    zoom zoom zoom
    hay313955795
        16
    hay313955795  
       2022-01-20 20:38:38 +08:00
    当初有个驻场的开发找我去开发 jFinal 还好我拒绝了 不然这会儿我就在这里抓狂了
    janus77
        17
    janus77  
       2022-01-20 21:09:19 +08:00
    轻和快的项目本来就不该长期维护。。。。如果立项的时候就考虑到长期维护,本来就不应该用轻快的 jfinal
    james122333
        18
    james122333  
       2022-01-20 22:09:47 +08:00
    确实是人的问题 轻量好懂都不好好维护 用重量级肯定也好不到哪去
    写一堆类并没有比较好维护 开发上容易失焦 改一个功能都要四处找影响点
    然后一堆人写的烂命名烂流程
    用 map 可以 只是要封装 直接用肯定会疯
    ajaxfunction
        19
    ajaxfunction  
       2022-01-20 22:33:26 +08:00
    我反而觉得 jfinal 就是应该是这样子, 什么叫极速开发? 能少就少,能省就省,

    用框架作者的话来说就是 为您节约更多时间,去陪恋人、家人和朋友
    uiosun
        20
    uiosun  
       2022-01-20 22:34:46 +08:00   ❤️ 1
    @tagtag +1 ,长期都是 PHP 爱好者。

    后来接触了不少用 PHP 写代码的人之后,才了解一件事:

    你以为的 PHP 和 JAVA 、C#、Go 差不多,而且轻便、高测试可用性、好维护;
    多数人用的 PHP 和早期 JS 差不多……那就是一堆 x 山!大家最喜欢开发需求(造 x ),最讨厌维护项目(吃 x )

    仔细想想,也是一绝!
    nielinjie
        21
    nielinjie  
       2022-01-21 08:46:15 +08:00
    类似的框架,是以快速出货为目标的,满足短期迭代、业务试错需求。如果验证完毕决定保留相关业务,需要逐渐重写为别的结构。
    sagaxu
        22
    sagaxu  
       2022-01-21 09:49:10 +08:00 via Android
    @nielinjie 快速 demo 用 rails 或 PHP 不是更快?
    sagaxu
        23
    sagaxu  
       2022-01-21 09:51:29 +08:00 via Android
    @ajaxfunction 第一次写的时候快,过几个月再改,省下来的时间都还回去了。除非一直只做新项目,且做完就扔不再碰。
    VKRUSSIA
        24
    VKRUSSIA  
       2022-01-21 20:02:58 +08:00 via Android
    这个跟 Jpress 是一个东西?
    GM
        25
    GM  
    OP
       2022-01-21 21:35:11 +08:00
    @VKRUSSIA
    JPress 基于 JFinal 开发,所以........
    lawler
        26
    lawler  
       2022-01-22 04:58:56 +08:00
    年轻真好,如同他们不知道火箭直径为什么和马屁股一样大似的,因为并没有什么用。

    我一度以为 springboot 是抄袭的 jfinal 。

    14 年初开始用 jfinal 接单并选型为公司开发底座,一个类五六行代码就能跑起来一个可以和数据库交互的 web 应用,两三行代码就能实现一个 C 端的 ORM 接入,同期国内外还有谁?届时 springboot 这个词组是什么,谷歌都不知道。大约 16 年中旬开始,springboot 开始在国内爆发。好在 jfinal 打了无 xml 的 entity 映射 /框架实现 /约定配置等这些设计基础。学起来 springboot 基本上一两天就上手了。但当时的 1.x 生态也令人发指,多数情况下,依然也要引入依赖和 xml ,jfinal 却还欣欣向荣。

    如这些设计。
    tojson -> responsebody
    url param -> restful
    route controller-> request mapping
    model -> mapper
    etc ...

    如果你拿 jfinal 和 ssh/ssm 框架比。你会觉得什么是极致。和 springboot 比,你依然会觉得清爽。
    只有和 spingboot 生态比,你才会觉得简陋。

    当然,现在他在被时代抛弃。
    go233
        27
    go233  
       2022-01-22 08:50:49 +08:00 via Android
    人的问题别怪语言。
    GM
        28
    GM  
    OP
       2022-01-22 21:53:24 +08:00
    @lawler g 华森岛帆高 1111111111111111111111111112222222222222222222222222222222233333333333333333333333334444444444445555555551111111111111222222222222222222333333333333333333333666666666777777777777777777••88888888888888888888811111111111111111122222223333334444444444444444455666666666666777777777777777777711122333334555……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………一;;;;;;;;;; QQQQQQQUUUUUUU;;;;;;;;;;;P0000000;UHJYITTKLGGGGGGGGGGGGGGGGG;;;WWWWWWWWLL;HRTRRR55IIIIIIIIIIIIIIIIIIIII666666666666666TFHRYTIIIEDDD BVMBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGYYYYVBDMFD,JL.KMJJJJJJJJJJJJJJJJJJJJGGGGGGGGGGGGGGGGGGGGJJJJJJJJJJJJJJJJJJJJQQQQQQQQQQQQQQQQQQQQJJJJJJJJJJJOUUU;FDFP;;P888U'''HLTTT [[[[[[[[[[ 000000000000000000H''''''''''''''''''''''''''''''''"""""""".XXXXXFFFFFFV OAL
    极致、清爽指的是到处都是全局函数调用带来的使用上的“简单、清爽”吗?
    lawler
        29
    lawler  
       2022-01-23 16:47:11 +08:00
    @GM #28
    所以你认为声明式注入比全局函数简单清爽?反射加 ioc 很 ok ,显式调用不 ok ?

    想象不出来你对其他开发框架的理解。
    GM
        30
    GM  
    OP
       2022-01-24 09:13:58 +08:00
    @lawler
    声明式注入粗一看是比全局函数麻烦和复杂,但是在现代框架的加持下,并不会麻烦多少,多了一点点麻烦带来的是全面性的扩展能力。JFinal 风格的全局函数调用看起来简单,但是意味着很快整个项目导出都是全局函数互相调用,都是蜘蛛网。

    如果你这点都想不明白,或者说从没碰到这种场景或需求,我觉得没有继续沟通的必要了。

    ````
    lawler
        31
    lawler  
       2022-01-24 11:31:54 +08:00
    @GM #30
    哎,你毕竟不是做设计的。跟你掰扯也没意思。只是告诉你,jfinal 这个框架的设计面罢了。

    btw..
    springboot 源码超 7 成代码依赖静态方法,从你写 springboot 应用的第一行静态代码 SpringApplication.run(arg)开始。有空多看看源码,学学设计也挺好。
    GM
        32
    GM  
    OP
       2022-01-24 13:34:17 +08:00
    @lawler 该用静态的用静态,该注入的注入,这个不难理解吧?

    我举个例子,JBoot 调用 mq 的方法是:

    Jboot.getMq().publish("channel", "jsonobject");

    用起来很简洁吧?
    好了,这代码过一个一年半载后,有个新需求,想发送消息的时候,额外附加一些扩展认证 header 信息,你瞬间就傻眼了。因为他这代码已经写死了就只能这么简单地发送简单信息。你要么整个抛弃这种写法,自己写个 Service ,然后现有代码里几十上百个地方一个一个改,要么自己去修改框架代码。

    如果是 Spring 风格的依赖注入,我定一个新的 Service 替换掉就好了,十来行代码。

    JFinal 里到处都是这种问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2735 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:08 · PVG 18:08 · LAX 02:08 · JFK 05:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.