springMVC里的model层与DTO层有什么区别

IT_newbies 2016-05-27 02:55:45
实习程序员,一直认为SpringMVC里的M是用来传值用的,直到后来知道了DTO才知道我以前都是用Model来做DTO的功能,其实自己并不知道Model是做什么的,百度了一下说model面向领域模型(领域模型是个什么鬼,净整名词),DTO更注重数据,并且DTO是面向UI,这时我的感觉就是model层是个没有用的东西(不用来传值的话那会有什么用),针对不同的UI设计不同的DTO,model的作用实在是费解
...全文
2153 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
loveunittesting 2016-05-27
  • 打赏
  • 举报
回复
多说几句,M就是模型,springmvc里面的model,其实就是DTO,有人说模型可以用作dto,理论上可行,但实际上,模型不应该暴露给客户端(调用模型的代码)那么多东西(如setter方法,mvc框架通过这个给model里面的字段赋值),否则模型就不能控制客户端的调用方式,客户端想修改什么字段直接用setter方法,那出了问题都不知道去哪里找。 模型也看你怎么用。比如很多人用hibernate/jpa,都是直接映射数据库的表(字段+setter,getter),其实也就算是个data holder,如果说是模型,只能算是贫血模型,也就是仅有字段和setter/getter方法。而充血模型才是真正处理复杂业务的模型,富含行为(方法)的模型,字段能不暴露给模型的客户端就不暴露。修改模型状态的途径只有它自己的方法和与他耦合的领域服务。
loveunittesting 2016-05-27
  • 打赏
  • 举报
回复
领域模型对于实习的水平来说有些费解,的确,多年的程序员也不一定能掌握领域模型方式的开发,领域模型学习门槛高一些,适合处理复杂的业务,提高代码重用几率。DTO就是用来传输数据了,说白了就是个data holder,里面就是放数据的,类似c的strut,基本不含逻辑,即使是转换的逻辑。领域模型最简单的例子,比如你要禁用应用里面的用户,用基础的事务脚本模式可能是这样:

User user = userService.get(userid);
user.setStatus(User.STATUS_DISABLED);
userService.update(user);
用领域模型可能是这样:

User user = userRepository.load(userid);
user.disable();
userRepository.save(user);
当然这个例子太简单,无法显示领域模型的优势,这种复杂度的程序,事务脚本会好些。领域模型配合DDD,效果倒是不错,不过用这个的公司少,因为门槛高,而且需要整个团队都熟悉这种模式。
qq_15915835 2016-05-27
  • 打赏
  • 举报
回复
先把基础打牢在来研究这些问题,当你的代码量足够多的时候,自然就能理解了。单单的研究这些领域模型并没有什么用

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧