springmvc分层领域模型概念详解

目录
  • 1.为什么出现分层领域模型这个东西?
  • 2.分层领域模型有哪些?
  • 3.分层领域模型的简单理解
    • 3.1 VO和DTO的区别
    • 3.2BO和DTO的区别
  • 4.总结

本文核心为分层领域模型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.分层领域模型的简单理解

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

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分层领域模型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringMVC体系分层模式原理图解

    SpringMVC MVC介绍 MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制器(controller)的缩写, 是⼀种⽤于设计创建 Web 应⽤程序表现层的模式. MVC 中每个部分各司其职: Model(模型):模型包含业务模型和数据模型,数据模型⽤于封装数据,业务模型⽤于处理业 务. View(视图): 通常指的就是我们的 jsp 或者 html.作⽤⼀般就是展示数据的.通常视图是依据模型数据创建的. Controller(控制器

  • springmvc分层领域模型概念详解

    目录 1.为什么出现分层领域模型这个东西? 2.分层领域模型有哪些? 3.分层领域模型的简单理解 3.1 VO和DTO的区别 3.2BO和DTO的区别 4.总结 本文核心为分层领域模型(VO , PO , BO, DAO ,POJO等)概念的个人理解. 1.为什么出现分层领域模型这个东西? (1)解决MVC架构中各层(比如视图层+控制层+服务层+数据访问层+数据库)中各层数据交互时,传递什么数据模型更加科学和合理. (2)更好的降低MVC架构中各层间的耦合性,提高层内的内聚性,这样更方便对软件进

  • Java分层概念详解

    service是业务层 action层即作为控制器 DAO (Data Access Object) 数据访问 1.JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分?(下面所描述的service层就是biz) 首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类. Dao层是使用了Hibernate连接数据库.操作数据库(增删改查). Service(biz)层:引用对应的Dao数据库操作,在这里可以编写自己需要的代码(比如简

  • 基于SpringMVC接受JSON参数详解及常见错误总结

    最近一段时间不想使用Session了,想感受一下Token这样比较安全,稳健的方式,顺便写一个统一的接口给浏览器还有APP.所以把一个练手项目的前台全部改成Ajax了,跳转再使用SpringMVC控制转发.对于传输JSON数据这边有了更深的一些理解,分享出来,请大家指正. 在SpringMVC中我们可以选择数种接受JSON的方式,在说SpringMVC如何接受JSON之前,我们先聊聊什么是JSON.具体的定义我也不赘述了,在JavaScript中我们经常这样定义JSON 对象 var jsonO

  • 基于线程、并发的基本概念(详解)

    什么是线程? 提到"线程"总免不了要和"进程"做比较,而我认为在Java并发编程中混淆的不是"线程"和"进程"的区别,而是"任务(Task)".进程是表示资源分配的基本单位.而线程则是进程中执行运算的最小单位,即执行处理机调度的基本单位.关于"线程"和"进程"的区别耳熟能详,说来说去就一句话:通常来讲一个程序有一个进程,而一个进程可以有多个线程. 但是"任务

  • SpringMvc+Mybatis+Pagehelper分页详解

    最近公司需要做一个告警页面的功能,需要分页,查了很多资料发现PageHelper比较合适 故写一篇从零开始的PageHelper使用的教程,也记录下忙活一天的东西 1.首先需要在项目中添加PageHelper的依赖,这里我用的Maven添加 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>

  • Java 虚拟机(JVM)之基本概念详解

    1.类加载子系统:负责从文件系统或者网络中加载Class信息,加载的信息存放在一块称之为方法区的内存空间. 2.方法区:就是存放类信息.常量信息.常量池信息.包括字符串字面量和数字常量等.方法区是辅助堆栈的块永久区,解决堆栈信息的产生,是先决条件. 3.Java堆:再java虚拟机启动的时候建立Java堆,它是java程序最主要的内存工作区域,几乎所有的对象实例都存放到Java堆中,堆空间是所有线程共享的.堆解决的是数据存储问题,即数据怎么放.放在哪儿. 4.直接内存:Java的NIO库允许Ja

  • 基于java中集合的概念(详解)

    1.集合是储存对象的,长度可变,可以封装不同的对象 2.迭代器: 其实就是取出元素的方式(只能判断,取出,移除,无法增加) 就是把取出方式定义在集合内部,这样取出方式就可以直接访问集合内部的元素,那么取出方式就被定义成了内部类. 二每一个容器的数据结构不同,所以取出的动作细节也不一样.但是都有共性内容判断和取出,那么可以将共性提取,这些内部类都符合一个规则Iterator Iterator it = list.iterator(); while(it.hasNext()){ System.out

  • java语言注解基础概念详解

    1.RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃: 2.RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期: 3.RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在: 这3个生命周期分别对应于:Java源文件(.java文件)--->.class文件--->内存中的字节码.

  • JavaScript事件概念详解(区分静态注册和动态注册)

    js中的事件 什么是事件?事件是电脑输入设备与页面进行交互的响应,我们称之为事件 事件类型 鼠标单击:例如单击button.选中checkbox和radio等元素:鼠标进入.悬浮或退出页面的某个热点:例如鼠标停在一个图片上方或者进入table的范围: 键盘按键:当按下按键或释放按键时: HTML事件:例如页面body被加载时:在表单中选取输入框或改变输入框中文本的内容:例如选中或修改了文本框中的内容: 突变事件:主要指文档底层元素发生改变时触发的事件,如DomSubtreeModified(DO

  • Java内存模型之happens-before概念详解

    简介 happens-before是JMM的核心概念.理解happens-before是了解JMM的关键. 1.设计意图 JMM的设计需要考虑两个方面,分别是程序员角度和编译器.处理器角度: 程序员角度,希望内存模型易于理解.易于编程.希望是一个强内存模型. 编译器和处理器角度,希望减少对它们的束缚,以至于编译器和处理器可以做更多的性能优化.希望是一个弱内存模型. ​因此JSR-133专家组设计JMM的核心目标就两个: 为程序员提供足够强的内存模型对编译器和处理器的限制尽可能少 ​下面通过一段代

随机推荐