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

关于 mybatis 和 dto 的一点疑问

  •  
  •   skai0dev · 10 天前 · 1540 次点击

    用 mybatis (用的 XML ,没有用 MybatisPlus )如果遇到了一些复杂的查询(比如连接多个表查询)有时候会返回一个多个表中的字段组成的 DTO 类用来接收结果,这个结果 DTO 一般也是直接返回给前端的,所以有时候就感觉这种方式好像有点不太符合分层隔离的规范呢?感觉这个 DTO 好像直接干穿了视图层,业务层和数据层呢。

    所以想问问各位大佬,是使用方式不对呢?还是一般实践中就只能这样呢,有更好的方法吗?

    11 条回复    2024-09-06 17:56:46 +08:00
    dzdh
        1
    dzdh  
       10 天前   ❤️ 1
    跟 DDD 一样。怎么可能 100%的隔离。100%的隔离就是用户和商品和订单不能互相调用。你拼数据吧。
    thevita
        2
    thevita  
       10 天前   ❤️ 1
    hexagonal 也好, layer arch 也好,我们对应用进行分层不是最终目的,是为了方便理清依赖关系,解耦业务逻辑与外部依赖。这里的 DTO 所在的层(Domain/Query) 反正都会被 view 层依赖的,如没有其他需求,是可以直接用的,可以当作 view 层这个 对象的实现直接使用了 domain 层定义的对象(比如作为一个 alias )
    wu00
        3
    wu00  
       10 天前   ❤️ 1
    DTO 转 VO 呗。
    数据层给你的 DTO 包含 Password 字段可能是用来处理逻辑的,你的 VO 不能输出该字段吧?
    GensKinsey
        4
    GensKinsey  
       10 天前   ❤️ 1
    BeanUtils 拷贝一份到 VO
    thevita
        5
    thevita  
       10 天前   ❤️ 1
    @thevita 这里的点在于 "没有其他需求",这个假设在业务迭代中不总是成立的,如果直接复用,未来需要添加 VO 的时候就很麻烦,所以可以先这样: type alias 一下 type Vo=DTO (看语言和工具了,哪种方式好), 加一个空的 mapper, 以后有需求了,改起来也方便
    nothingLeft
        6
    nothingLeft  
       10 天前   ❤️ 8
    还 DTO VO BO ,老子 entity 一把梭,遇到需要在增加 VO
    sagaxu
        7
    sagaxu  
       10 天前   ❤️ 1
    别的语言风俗习惯上不搞这么多 XXO 的,影响维护性了吗
    ENNRIaaa
        8
    ENNRIaaa  
       10 天前   ❤️ 1
    没关系吧,只要不返回多余的字段就行。
    qbmiller
        9
    qbmiller  
       10 天前   ❤️ 1
    既然返回前端了。这个 dto 命名改成 VO VIEW 。 方便辨认。 大胆用
    cBlank
        10
    cBlank  
       10 天前   ❤️ 1
    一般我都是创建 DO,DTO,VO 这几个,返回给前端一般都要过滤下。
    gerefoxing
        11
    gerefoxing  
       9 天前   ❤️ 1
    要加一层 VO ,你的 DTO 查询会随着以后业务增加字段,直接返回的会涉及到一些不想暴露或者多余无用的信息字段,加一层 VO
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2256 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 09:47 · PVG 17:47 · LAX 02:47 · JFK 05:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.