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

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

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

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

    太恶心了

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

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

    用框架作者的话来说就是 为您节约更多时间,去陪恋人、家人和朋友
    uiosun
        20
    uiosun  
       116 天前   ❤️ 1
    @tagtag +1 ,长期都是 PHP 爱好者。

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

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

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

    我一度以为 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  
       115 天前 via Android
    人的问题别怪语言。
    GM
        28
    GM  
    OP
       114 天前
    @lawler g 华森岛帆高 1111111111111111111111111112222222222222222222222222222222233333333333333333333333334444444444445555555551111111111111222222222222222222333333333333333333333666666666777777777777777777••88888888888888888888811111111111111111122222223333334444444444444444455666666666666777777777777777777711122333334555……………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………一;;;;;;;;;; QQQQQQQUUUUUUU;;;;;;;;;;;P0000000;UHJYITTKLGGGGGGGGGGGGGGGGG;;;WWWWWWWWLL;HRTRRR55IIIIIIIIIIIIIIIIIIIII666666666666666TFHRYTIIIEDDD BVMBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBGYYYYVBDMFD,JL.KMJJJJJJJJJJJJJJJJJJJJGGGGGGGGGGGGGGGGGGGGJJJJJJJJJJJJJJJJJJJJQQQQQQQQQQQQQQQQQQQQJJJJJJJJJJJOUUU;FDFP;;P888U'''HLTTT [[[[[[[[[[ 000000000000000000H''''''''''''''''''''''''''''''''"""""""".XXXXXFFFFFFV OAL
    极致、清爽指的是到处都是全局函数调用带来的使用上的“简单、清爽”吗?
    lawler
        29
    lawler  
       113 天前
    @GM #28
    所以你认为声明式注入比全局函数简单清爽?反射加 ioc 很 ok ,显式调用不 ok ?

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

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

    ````
    lawler
        31
    lawler  
       112 天前
    @GM #30
    哎,你毕竟不是做设计的。跟你掰扯也没意思。只是告诉你,jfinal 这个框架的设计面罢了。

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

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

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

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

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

    JFinal 里到处都是这种问题。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4299 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 02:16 · PVG 10:16 · LAX 19:16 · JFK 22:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.