po、dto、vo 都是啥,分这么多层有必要吗?mapstruct 对象转换工具5分钟学会,告别beanutils

作者: 御风大世界分类: 计算机技术 发布时间: 2021-09-21 08:00:17 浏览:72191 次

po、dto、vo 都是啥,分这么多层有必要吗?mapstruct 对象转换工具5分钟学会,告别beanutils

あかsola:
为啥不用ObjectMapper。你们难道真的忘记了这鼻祖级的对象转换工具了吗?还有一个copyable接口。 DTO,VO这些都是老一代的格式了。那时候还没有前后端分离,那时候还是jsp,temlate时代的产物了。vo全称 view object,意思是视图层封装对象。dto是 数据由数据库对象,转向view层对象的数据寄存器。 现在对dto和vo的理解,应该是vo是和前端交互的数据封装格式,有了这种封装,我可以选xml或者json做序列化组件,将vo数据写进response里。dto是用来过滤,优化,转换的中间对象。类似编译器,先将原始数据格式转换成ast,然后再由ast生成目标对象。我一般会使用beanutil先将vo,copy给dto,再由dto,copy给model。 现在好多都是微服务架构。后台服务就直接用restResp...,中台使用框架配置映射器,将各个微服务来的数据进行整合。 现在很少写service层了,以前写是因为用dubo,现在都用k8s,现在甚至两三个接口都起一个服务。。。而且好多写service层的也没见多少重构的,或者换impl的。而且如果service和impl不分别打包,根本没有意义。正确的应该是架构设计写接口,控制层引包使用。实现层引包使用。

【回复】我也最烦一个很小的项目写一大堆service和impl,永远不会重构或者多实现。很多人都是别人教他这么写的,都不知道为什么
【回复】微服务也要用啊 数据库数据是原料 前端接口需要的好几个组合数据如果直接用数据库对象类传输 那别的接口就会有多余产出[辣眼睛]
【回复】回复 @最后の夏天我和你 :实际体验其实更差了,为了接口而接口,每次写代码,代码都得往下在点一层看实现,目录也得再点下impl,网上别的地方也聊过,一大堆来说我不懂基础,不懂面相对象的,哎
白少年2023:
现在公司不推荐使用这种工具进行Bean之间的转换,代码是用来读的,有时候你通过IDE看Bean的一个属性发现没有被用到,实则可能是某个地方使用的工具类进行转换了,使用工具类也有一定要求,不能无脑转,而且现在也有很多插件辅助能快速进行大量的get/set方法,自己一个一个写属性转换也不麻烦,还方便后面代码的阅读

【回复】都是借口,就是懒得学习。你要是遇到几十个property的 class,能给你写吐了,甚至一遍都不能写对
【回复】你这里有个错误认识:lombok 和 mapstruct 这些工具本质会在编译阶段帮我们生成对应的类,所以编译后 IDE 查找引用会找到。找不到的是反射 aop 操作的对象。 我自己来说,因为公司一些业务,数据表大部分都有十个左右字段,在开发时可能需要改个名改个类型改个顺序(我强迫症会保持和数据库以及业务逻辑同步的顺序),那手动操作是非常白费时间。
【回复】写的时候确实很爽,查问题可能就火葬场了[辣眼睛]
乱世卧龙:
非常诟病spring的这种设计,跟当年的ejb一样机械和繁重。远不如php,ruby这种语言写起来快速易读好改。大部分时间在重复结构,写接口海,一层调一层,而且一点也不清晰。给了若干层次,又没有严格边界和区分。导致分层叫啥名的都有,代码写在哪一层的都有,改起来就是千层饼里找芝麻,更别说冷不丁来个aop给你横插一道,你还得多跳好几个文件。完全违背less is more,开发成本高效率低,框架越出越啰嗦,开发者越用越陌生,框架代码是业务代码几十倍,中小项目开发,就像为了个鼠标垫,开了个网吧。

【回复】首先同意层主吐槽的,spring等一众Java框架确实是越来越复杂,越来越麻烦。需要补充的是,Java这些写的越来越套娃的框架本身设计出发点就是企业级应用场景,什么是企业级呢,就是不差钱、多人协同、需求复杂、稳定性高的开发场景。企业级开发场景中最大的成本不是服务器配置啥的,而是人力成本。能节省人力成本的框架才是好框架,于是Spring整得越来越多,限制卡的越来越死,效果就是多人协同写出的代码基本都是一个风格,即使谁离职了换个新人也能很快的上手。接口层层封装也是为了让项目能在不删改当前代码的情况下做出更改(只通过增加),虽然耗费资源更多了,但是降低了产品不稳定修bug所产生的人力成本,总体还是在降低成本。 而python php 这些语言和相关的框架确实写起来很舒服,因为它们不限制或者有很少的规矩去限制开发者,个人用用解放创造力很好,但是放在企业级应用里边这就是灾难。举个例子,企业级开发场景里,人可以离职,但是项目不能停。一个人离职了另一个人接手项目,由于这些语言没有客观的规矩去限制,导致很可能同一个需求能有很多种写法,最后接手的人根本无法或者无法快速理解前一个人的工作,甚至会选择重构已经完成的工作,会比Java这种死板的语言额外增加很多人力成本。 这便是即使Java Spring这些语言和框架如此不人性化却依旧在如今持有着大量市场占有率的原因。
【回复】要写的爽自然简单,人多了怎么管理?
【回复】想回你点啥,又懒得说的。我也图不到啥。 精简下 1. 别以偏概全 2. 再了解了解软件工程
demo开发工程师:
其实……机翻的字幕还不如没有字幕[笑哭]

【回复】我还奇怪了一下,又是我不懂的新技术呢
【回复】同意,或者机翻后再校对下
王老师trifolium:
我自己封装了apache的beanFillter,加上java8的lamda好用的一匹,

【回复】回复 @公平公平还是t-m-d公平 :https://gitee.com/wxd-admin/shared-warehouse/tree/master
【回复】大佬,同求,麻烦私信发我一份,学习下
明净不动小心心:
up,多分享,你公司一些主流高效的项目设计,代码风格和数据处理,小技巧啊,我现在经验饥荒。谢谢啦,已投币啦

莫名的奇妙jo:
都是mapper接口,那我还能正常用mybayis呀,还能写sql映射吗,mapstruct的@mapper与spring的@mapper注解不冲突吗

【回复】回复 @人生就如此时梦 :数据领域驱动
【回复】回复 @御园麻由Official :ddd结构是啥?
杼筆:
按照阿里的规范,我会把DTO、VO这些全部大写。Manager层用来操作中间件挺好,连接Service层和DAO层

【回复】manager层能举个例子吗哥
FlintyLemming:
这么多层,我在开发的过程中遇到的问题就是找文件不是很方便。因为 IDEA 虽然可以纵向显示标签页,但不能像 Visual Studio 按文件夹名称排序,找起来有的时候就容易眼花

【回复】遇到这个问题,可能是代码组织有问题,或者项目规范没搞好,开发人员的项目培训没做到位。
I老亚瑟了:
为什么女朋友是复式?这个设计不合理啊

【回复】表达了up主内心yy,然后类名是CoolBoy
我知道了哟:
[妙啊]我感觉在普通场景下还是Beanutils方便

【回复】我一般是简单的几个属性复制就用beanutils,复杂的带有嵌套的就用mapstruct,beanutils简单但是性能低。
鱼骨0x01:
ide eval reset当心jetbrain法务部警告[笑哭]

正在学习前端中:
前端传给 后台的,应该叫 model吧! 后台各层直接的传递,应该叫dto, 数据库里应该叫entity,对应的数据层应该叫 domain。多个domain组合时,为了传递数据,可以叫bo,有点类似于dto的组合。

炮姐俺の:
jdk8那个包好像不推荐用了,然后processor版本我选择和knife4j2.0.8里带的mapstruct一个版本

程序员 教育 程序设计 视频教程 校园 mapstruct 大学生 java idea 让学习变得更简单

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!