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

快 2021 年了, Java server 端业务代码的“正确”风格写法是啥?

  •  1
     
  •   hahaFck · 2020-10-16 16:53:20 +08:00 · 3440 次点击
    这是一个创建于 1499 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如企业的业务系统,大多数都是前后端分离吧,那后端的写法风格是啥呢,先说说我接触的吧,还是老一套,先写个 dao,service,然后呢在写 impl,但是我发现 dao 和 service 的 impl 基本就只有一个,很少情况下有去另外需要实现同一个 service 的(难道是抽象能力不行?),然后前端传过来的数据都是 map,对数据库的增删改查都是对 map,或者 list<map>处理,无非就是循环用的多少。很少有建数据库表的 entity 的,慢慢的在 controller 类里写的越来越多,整个 controller 慢慢变得非常大。

    以前看过一次 activiti5 (工作流引擎)的源码,很惊讶他的那个 command 模式,代码写的非常优雅。

    大家能不能分享下自己的写法,或者有什么好的开源的项目可以学习下么。

    22 条回复    2020-10-17 17:17:57 +08:00
    chendy
        1
    chendy  
       2020-10-16 17:00:50 +08:00
    map 爱好者建议使用 php,不是说 php 不好,只是这种方式 php 更合适
    dao 、service 没必要也不用抽接口,需要的时候 ide 重构抽一个就行了
    monkeyWie
        2
    monkeyWie  
       2020-10-16 17:06:35 +08:00
    用 map 建议转 node.js🐶
    huijiewei
        3
    huijiewei  
       2020-10-16 17:19:47 +08:00
    Port & Adapter 走起
    ixiaohei
        4
    ixiaohei  
       2020-10-16 17:24:10 +08:00
    之前在金融公司就是 map 满天飞,一点一点的改 dto ;我在的 3 年都没改完;项目大了 map 是真坑的;特别超过 3 层嵌套;你不分析代码你根本不知道里面都是什么 key,什么类型
    tang123456
        5
    tang123456  
       2020-10-16 17:24:43 +08:00
    别用 map 传参和返参,目前公司现在是 controller 、service 、mapper 、model
    lower
        6
    lower  
       2020-10-16 17:28:00 +08:00
    传 json 字符串吧😀
    knightdf
        7
    knightdf  
       2020-10-16 17:28:49 +08:00
    我不管用啥语言写后端都是 service, model, schema, view/controller
    liujavamail
        8
    liujavamail  
       2020-10-16 17:48:49 +08:00
    前端传 map 是什么样子的?是指 Hash 吗?
    hahaFck
        9
    hahaFck  
    OP
       2020-10-16 17:54:00 +08:00 via iPhone
    @ixiaohei 是呀,调试也特别麻烦。还有各种类型转换。
    PopRain
        10
    PopRain  
       2020-10-16 18:13:21 +08:00
    .neter 过来围观。。。 这么原始? 感觉是 delphi 时代三层调用的方法,完全没有面向对象嘛
    jzmws
        11
    jzmws  
       2020-10-16 18:25:47 +08:00
    Map 转实体
    night98
        12
    night98  
       2020-10-16 18:28:59 +08:00
    用 map 写业务的一律锤死,没人知道你 map 里面到底是啥,得根据调用一步一步看,封装 vo dto 不香吗
    slert
        13
    slert  
       2020-10-16 18:30:50 +08:00
    dao service 的接口是没啥必要 甚至简单的情况下在 controller 里直接操作 orm 也行吧
    arthas2234
        14
    arthas2234  
       2020-10-16 18:42:18 +08:00
    用 map 传参,参数校验写的跟翔似的。这也难怪你的 controller 越写越大
    看你的描述,这个项目我都不敢碰
    boris93
        15
    boris93  
       2020-10-16 18:47:59 +08:00 via Android
    dao 和 service 如果只有一种实现,那就不需要再上接口,直接放实现类就行了
    用 map 传参?看我 tm 不喷死他。参数如果没有很极端的需求,一律定义实体类。用 map 鬼知道传了什么,后面维护等着火葬场
    talen666
        16
    talen666  
       2020-10-16 20:32:47 +08:00
    看到 map 当参数,就想吐...
    hahaFck
        17
    hahaFck  
    OP
       2020-10-17 08:07:17 +08:00 via iPhone
    是的,大多数都是 map 参数,返回值是 map 或者 List<map> ,导致功能复用特别难,大量的重复代码快。
    Danswerme
        18
    Danswerme  
       2020-10-17 08:08:24 +08:00
    @liujavamail 同问,楼上说的 map 对于前端来说是啥呀?
    evoluc97
        19
    evoluc97  
       2020-10-17 08:45:56 +08:00
    Lst<Map<Integer, List>>, 无限套娃, 这种项目看到都怕😅
    cheng6563
        20
    cheng6563  
       2020-10-17 13:54:23 +08:00
    @Danswerme 就是没绑定没函数只用来存数据的普通 object
    Danswerme
        21
    Danswerme  
       2020-10-17 15:19:11 +08:00
    @cheng6563 噢,好吧。这么做对 JAVA 不友好的话应该用什么传递给 JAVA 呢?
    totoro52
        22
    totoro52  
       2020-10-17 17:17:57 +08:00
    个人建议用 vo 或者 DTO 来代替传值,优雅又美丽 就是 entity 多了点 但是后期维护绝对容易 除非你在每个方法上面注释这个 Map 里到底有啥 不然谁都不知道里面到底有啥
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2760 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:08 · PVG 18:08 · LAX 02:08 · JFK 05:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.