关于 SSM 框架下实体类的一些疑问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qianyan
V2EX    Java

关于 SSM 框架下实体类的一些疑问

  •  
  •   qianyan 2019-08-11 18:57:32 +08:00 via Android 5236 次点击
    这是一个创建于 2307 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今年刚毕业,一直有个关于我们公司开发框架的疑问

    公司用的框架都是无实体类的,接收参数,返回数据都是用 map 封装,sql 传值也是 map。意思就是已经完全脱离了实体类,一直觉得怪怪的,问了两个同学他说他们不是这样的,我就想了解一下其他人是怎么写的,然后在 github 上找了两个前后端分离的 ssm 框架的开源项目,但感觉他们实体类也没什么用处,甚至一个项目中接收参数既有对象,也有普通类型,还有 map 看得我都不知道怎么的好了

    想听听佬们是怎么做的

    或者有什么好的开源项目让我可以借鉴一下

    24 条回复    2019-08-15 01:22:44 +08:00
    zjp
        1
    zjp  
       2019-08-11 19:28:20 +08:00 via Android
    滥用 map 不如用动态语言写…公司的旧项目里很多方法返回值是 JsonObject,IDE 的静态检查全废了。新项目里复杂类型的参数和返回值都要定义类
    Xbluer
        2
    Xbluer  
       2019-08-11 19:29:11 +08:00
    我司历史遗留项目也有这种情况:所有的方法的参数都是 Map 或 Map<String, Object>。

    这种方式编码的问题在于:
    1 )程序不运行起来不知道 Map 中有什么内容,即哪些 Key-->Value 对。
    2 )获取 value 值后需要强制类型转换,无法发挥 Java 静态类型的编程语言的优势。
    3 )更多情况下 Map 不仅仅用来传参,还会用来保存返回值。比如一个方法调用链 :funcA(Map) --> funcB(Map) -- funcC(Map) ,这里面的函数可能存在会出现这种情况,funcB 中又修改了 key = foo 对应的 value 值,然后 funcC 中添加 key = bar 对应的 value 值,然后 funcA 中又读取了 foo 和 bar。
    taogen
        3
    taogen  
       2019-08-11 19:34:28 +08:00 via Android
    一般都是有实体类的。感觉用 map 不太方便知道里面有什么字段,实体类可以直接调用 getter 方法就可以了。
    mamian
        4
    mamian  
       2019-08-11 19:35:16 +08:00
    用实体类,第一清晰、明了,第二用 `map.get` 的时候使用字符串填充容易出错。
    taogen
        5
    taogen  
       2019-08-11 19:43:28 +08:00 via Android
    另外,用实体类可以很好的利用面向对象特性,抽象,封装,继承,多态。
    qianyan
        6
    qianyan  
    OP
       2019-08-11 19:44:41 +08:00 via Android
    @Xbluer 确实是这样的,看他们写的接口不看借口文档根本看不懂到底接收哪些参数,所以我一般都会在接口注释中写上接受的参数列表。

    只是最近在自己写个东西在纠结还要不要按照公司那种,现在我觉得我应该用实体类封装一下来弄。

    大佬有没有什么好的开源项目推荐一下呀
    xuanbg
        7
    xuanbg  
       2019-08-11 19:52:01 +08:00
    多写几个实体类死不了人,全用 Map 迟早掉坑里。
    qianyan
        8
    qianyan  
    OP
       2019-08-11 19:53:47 +08:00 via Android
    @taogen 但我现在用 map 有点上瘾,所以准备跳出来看看
    cheng6563
        9
    cheng6563  
       2019-08-11 19:55:55 +08:00 via iPhone
    不如用动态语言了
    aguesuka
        10
    aguesuka  
       2019-08-11 19:57:05 +08:00 via Android
    用实体类相当于在给接口写文档。而且调用者不看文档就知道类里有哪些变量
    az422
        11
    az422  
       2019-08-11 20:10:01 +08:00
    java 这种强类型语言,参数用 map 很容易增加心智负担和掉坑。 比如一次 count 字段,你 map.get 时,得思考这里面是一个 Integer 呢还是 Long 呢,结果一顿操作后发现传了个 string 型的数字
    taogen
        12
    taogen  
       2019-08-11 20:25:01 +08:00 via Android
    可以看下这个项目 https://gitee.com/lcg0124/bootdo
    qianyan
        13
    qianyan  
    OP
       2019-08-11 21:06:36 +08:00 via Android
    @az422 还真是这样,前些天写了两个报表,各种强制类型转换
    aaahhh123
        14
    aaahhh123  
       2019-08-11 21:32:37 +08:00
    ma
    leafShimple
        15
    leafShimple  
       2019-08-11 21:59:35 +08:00
    学习了,除了上面说到的点以外,还有性能上的差异我觉得也需要考虑上。
    luozic
        16
    luozic  
       2019-08-11 22:01:18 +08:00 via iPhone
    滥用 map 导致现在的契约测试和前后端分离的类型校验完蛋了,那大部分接口可用性基本靠人肉覆盖了?
    hhhsuan
        17
    hhhsuan  
       2019-08-11 23:04:18 +08:00 via Android
    什么是实体类?
    Takamine
        18
    Takamine  
       2019-08-11 23:09:36 +08:00
    接受一般都是 xxxVO,返回一般都是封装好的 ServiceResponse<T>。
    yukiir
        19
    yukiir  
       2019-08-12 00:02:41 +08:00 via Android
    一直用实体类,不过被公司新来的安卓喷了,说太复杂看不懂,哈哈。
    qianyan
        20
    qianyan  
    OP
       2019-08-12 10:14:59 +08:00 via Android
    @yukiir 我们公司安卓都是把后台给的 json 转为实体类来用的
    qianyan
        21
    qianyan  
    OP
       2019-08-12 10:15:34 +08:00 via Android
    @yukiir 所以经常看到他们有一堆的内部类
    luozic
        22
    luozic  
       2019-08-12 11:35:15 +08:00 via iPhone
    现在 ts 这么火的原因就是类型严格有助于控制瞎几把整,并且提升了重构的安全性,都用 map 了那直接用弱类型的动态语言梭哈不是更爽,没到一定数量级,机器比人便宜多了。
    lancelock
        23
    lancelock  
       2019-08-12 13:57:24 +08:00
    都写实体类吧,用 lombok 写个实体类也花不了什么功夫。
    qianyan
        24
    qianyan  
    OP
       2019-08-15 01:22:44 +08:00 via Android
    就行

    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1125 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 18:10 PVG 02:10 LAX 10:10 JFK 13:10
    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