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

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

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

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

    公司用的框架都是无实体类的,接收参数,返回数据都是用 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   ·   实用小工具   ·   1025 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 230ms · UTC 20:22 · PVG 04:22 · LAX 12:22 · JFK 15:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.