服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - springmvc分层领域模型概念详解

springmvc分层领域模型概念详解

2021-11-30 11:36紫荆果 Java教程

本文核心为分层领域模型(VO , PO , BO, DAO ,POJO等)概念的个人理解,结合springmvc浅谈分层领域模型的相关知识,感兴趣的朋友跟随小编一起看看吧

本文核心为分层领域模型VOPOBODAOPOJO等)概念的个人理解。

1.为什么出现分层领域模型这个东西?

(1)解决MVC架构中各层(比如视图层+控制层+服务层+数据访问层+数据库)中各层数据交互时,传递什么数据模型更加科学和合理。
(2)更好的降低MVC架构中各层间的耦合性提高层内的内聚性,这样更方便对软件进行维护
(3)一定程度上的提高信息的安全性,根据浏览器,可以知道视图层和控制层传输的数据模型,但是很难准确定位其它各层传输的领域模型中的具体字段。

2.分层领域模型有哪些?

①VO(ViewObject)
显示层对象,通常是Web向模板渲染引擎层传输的对象(阿里Java开发手册分层领域模型),对于一个WEB页面,用一个VO对象对应整个界面的值。
②DTO(DataTransferObject)
数据传输对象,前后端分离开发模式中,前端与controller层数据交换,在java中作为数据传输,应该进行序列化
③BO(Business Object)
业务对象,主要作用是把业务逻辑封装成一个对象。这个对象可以包括一个或多个其它的对象,用来处理业务逻辑。有时候做开发时,当controller层调用Service层服务接口时,把DTO领域模型或者其它数据模型转换为BO模型**,作为参数传递给Service接口
④DAO(Data Access Object )
数据访问层对象,主要用来封装对数据库的访问,它是一个面向对象的数据库接口,负责持久层的操作,为业务层提供接口,主要用来封装对数据库的访问,常见操作无外乎 CURD。在Mybatis中对应的是Mapper
⑤PO(Persistant Object)
持久对象,简单说PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象
通常PO里面除了get,set之外没有别的方法
对于PO来说,数量是相对固定的,一定不会超过数据库表的数量
等同于Entity,Entity基本等于POJO(Plain Ordinary Java Object)
⑥DO
DO现在主要有两个版本:
一个是阿里巴巴的开发手册中的定义, DO(Data Object)这个等同于上面的PO.
另一个是在DDD(Domain-Driven Design)领域驱动设计中
DO(Domain Object)这个等同于上面的BO

3.分层领域模型的简单理解

有图有真相,别的慢扯,先上图

springmvc分层领域模型概念详解

3.1 VO和DTO的区别

(1)VO(Value Object)
这货就是用来展示,就是界面(网页,客户端,APP)展示时,从后台获取的展示出的数据(在网页中,VO主要以js里面的对象存在
(2)DTO(Data Transfer Object)
图中,该类横跨两个层次,即有两种存在形式:
①后端,DTO是以java对象的形式,前端传递的数据(目前主流是json),由框架(主流的springboot)转为DTO形式
②前端:以js里面的对象(也可以简单理解成json),比如
ajax请求中的数据体**
(3)主要区别
字段不一样,VO往往根据展示业务的不同,删减一部分DTO中的字段,因此也造就了值不一样
比如DTO数据为

{
“name”:“kun”
“age”:100
}

展示业务一需要的数据(VO):

{
“age”:100
}

3.2BO和DTO的区别

(1)BO 业务对象
BO应该说是一个业务对象,对应着一类业务,一类业务(BO)可能会有很多业务操作,换言之,BO会有很多针对自身数据进行计算的方法。比如springMVC中的service层中有很多service类,每个类除了get和set方法(@Autowired自动注入),还定义了很多调用Mapper(DAO)的方法.
(2)为什么图中BO横跨两层
①现在很多持久层框架自身就提供了数据组合的功能。
②BO有可能是在业务层由业务来拼装PO而成
③也有可能是在数据库访问层由框架直接生成
④很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用
(3)BO和DTO的主要区别和联系
BO是对内(比如DAO等),DTO是对外(比如前端)
BO为了进行业务计算需要辅助数据,辅助数据可能来自DTO。
③BO可以为上层提供的很多数据,其中可能有DTO某些业务不需要的,因此DTO需要在BO的基础上,只要自己需要的数据,然后对外提供
④在这个关系上,通常不会有数据内容的变化,内容变化要么在BO内部业务计算的时候完成,要么在解释VO的时候完成

4.总结

(1)分层领域模型是偏理论,实际应用的时候,根据所使用的框架进行切合实际的修改和省略。
(2)如果第一次接触,建议按照教条进行操作,以方便加深理解。
(3)不要教条主义的前提,也有熟悉和理解教条主义,才能结合实际进行操作。

到此这篇关于springmvc分层领域模型概念详解的文章就介绍到这了,更多相关springmvc分层领域模型内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_38182673/article/details/119837140

延伸 · 阅读

精彩推荐
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30