SpringBoot中各种O的分层模型

news2024/9/29 17:01:43

文章目录

  • 领域模型中的实体类
  • 概念:
  • 项目中的实体类
  • rest api中的model, vo, dto之间的关系
  • 凤凰架构讲课笔记

设计模式的单一职责:
各种XXO

  • Pojo: 普通Java类
  • Dao:Database Access Object: 专门用来访问数据库的对象
  • TO:transfer Object: 专门用来传输数据的对象
  • VO:View/Value Object: 值对象,视图对象(专门用来封装前端数据的对象)
    阿里开发手册中写的工程结构如下:
    在这里插入图片描述

⚫ 开放 API 层:可直接封装 Service 接口暴露成 RPC 接口;通过 Web 封装成 http 接口;网关控制层等。
⚫ 终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染,JSP 渲染,移动端展示等。
⚫ Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
⚫ Service 层:相对具体的业务逻辑服务层。
⚫ Manager 层:通用业务处理层,它有如下特征

  • 1)对第三方平台封装的层,预处理返回结果及转化异常信息,适配上层接口。
  • 2)对 Service 层通用能力的下沉,如缓存方案、中间件通用处理。
  • 3)与 DAO 层交互,对多个 DAO 的组合复用。

⚫ DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase、OceanBase等进行数据交互。
⚫ 第三方服务:包括其它部门 RPC 服务接口,基础平台,其它公司的 HTTP 接口,如淘宝开放平台、支付宝付款服务、
高德地图服务等。
⚫ 外部数据接口:外部(应用)数据存储服务提供的接口,多见于数据迁移场景中。
后端层次划分:
 在这里插入图片描述
 后端分包:
 在这里插入图片描述
 POJO与JavaBean:
 在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
POJO就是简单的私有属性,加get/set方法,

JavaBean,就是会做一些逻辑处理,包括接收事件,和查找事件等

在这里插入图片描述
POJO的使用:

在这里插入图片描述
在项目应用中,VO对应于页面上需要显示的数据(表单),DO对应于数据库中存储的数据(数据表),DTO对应于除二者之外需要进行传递的数据。

领域模型中的实体类

领域模型中的实体类分为四种类型:VO、DTO、DO、PO,各种实体类用于不同业务层次间的交互,并会在层次内实现实体类之间的转化。

业务分层为:视图层(VIEW+ACTION),服务层(SERVICE),持久层(DAO)

相应各层间实体的传递如下图:
  在这里插入图片描述
实际项目中我们并没有严格遵循这种传递关系,但这种和业务层次的关联对我们理解各实体类的作用是有帮助的

概念:

VO(View Object):视图对象,用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。

DTO(Data Transfer Object):数据传输对象,这个概念来源于J2EE的设计模式,原来的目的是为了EJB的分布式应用提供粗粒度的数据实体,以减少分布式调用的次数,从而提高分布式调用的性能和降低网络负载,但在这里,我泛指用于展示层与服务层之间的数据传输对象。

DO(Domain Object):领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。

PO(PersistentObject):持久化对象,它跟持久层(通常是关系型数据库)的数据结构形成一一对应的映射关系,如果持久层是关系型数据库,那么,数据表中的每个字段(或若干个)就对应PO的一个(或若干个)属性。

项目中的实体类

项目中常见的实体类有VO,DO和DTO,命名规则也常是以相应字符串结尾,如*VO.Java。

但是DTO不总是遵循这个规则,而通常与他的用途有关,如写成*Query.java,表示存储了一个查询条件。

项目中实体类出现的业务层次也没有这么严格,例如我们可以在视图层就组装一个DO,也可以将一个VO从持久层传出来,所以与业务分层相关联的划分方法显得有些冗余。

从项目代码中抽象出的理解是:VO对应于页面上需要显示的数据,DO对应于数据库中存储的数据,DTO对应于除二者之外需要进行传递的数据。

rest api中的model, vo, dto之间的关系

model:用于接收数据库中的数据,通过mybatis 的ORM对象关系映射来获取数据

service主要是来处理业务逻辑,返回数据(数据的返回不会做如何处理,只是将model中的数据进行整合然后保证返回的数据完整性,比如在service中返回一个user model 和一个 role model,会提供一个UserROleBO来接收user 和 role的数据)

dto:dto主要是用来作为传输数据,在我们的项目中是用来接收远程调用接收响应的对象

vo:主要是我们本地调用的对象, 用来向用户显示(BO中的user和role只需要显示userName和roleName,会通过VO来进行显示)

在实际的开发中,VO对应页面上需要显示的数据,DO对应于数据库中储存的数据(表列,也就是model),DTO对应于除二者之外需要传递的数据。

DTO(data transfer object):数据传输对象,以前被称为值对象(VO:value object),作用仅在于在应用程序的各个子系统间传输数据,在表现层展示。

与POJO对应一个数据库实体不同,DTO并不对应一个实体,可能仅存储实体的部分属性或加入符合传输需求的其他的属性。

凤凰架构讲课笔记

在这里插入图片描述
但是会有以下的问题:
在这里插入图片描述
简化我们的模型:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2177367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

游戏账号系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,卖家管理,游戏类别管理,游戏账号管理,站内联系管理,交易订单管理,帐号退货管理 微信端账号功能包括:系统首…

webshell-HTTP常见特征

一、总体特点 二、蚁剑 数据中可以看到一些明文字符串函数,响应中可以看到响应的明文数据。 ant特征以及对数据base64可以解码 chr类别的会出现大量的chr编码 大量的百分号字符 三、哥斯拉 第一个请求包很大 响应为0 密钥被拆分到数据前后 响应包cookie带&#xf…

长文本溢出,中间位置显示省略号

1.说明 Flutter支持在文本末尾显示溢出省略号。现在想要实现在文本中间位置显示省略号,这里使用的方法是通过TextPainter计算文本宽度。(我目前没有找到更好的方法,欢迎大家指教。) 2.效果 源码 1.MiddleEllipsisTextPainter …

【无人机设计与控制】基于MATLAB的四旋翼无人机PID控制动力学建模研究制

摘要 本文研究了基于MATLAB的四旋翼无人机动力学建模和PID控制器设计。通过在Simulink中搭建四旋翼无人机的动力学模型,并结合经典PID控制算法,设计了无人机的姿态控制系统。实验结果表明,所设计的PID控制器能够有效稳定无人机的姿态&#x…

Gitlab 配置自动化Pipeline

在GitLab中配置CI/CD流水线(pipeline)以实现自动化构建和测试,你需要遵循以下步骤: 1. 创建 .gitlab-ci.yml 文件:在项目的根目录或子目录中创建一个名为 .gitlab-ci.yml 的文件,这是定义GitLab CI/CD流水…

JavaWeb之过滤器

1. 过滤器的概念 过滤器是Java Servlet规范中定义的组件,用于在请求到达Servlet之前或响应返回客户端之前,对请求或响应进行拦截和处理。过滤器可以实现以下功能: 日志记录:记录请求的详细信息,如URI、参数、时间等。…

Hugging Face + JuiceFS:多用户多节点环境下提升模型加载效率

Hugging Face 的 Transformers 是一个功能强大的机器学习框架,提供了一系列 API 和工具,用于预训练模型的下载和训练。为了避免重复下载,提高训练效率,Transformers 会自动下载和缓存模型的权重、词表等资源,默认存储在…

官方权威解读|CNAS-CL01过程部分解读,抽样部分

CNAS-CL01文件是软件测试实验室申请CNAS软件评测机构资质的重要参考材料,也是CNAS软件测试实验室建立质量管理体系的重要依据。近日CNAS为响应国家相关要求,组织开展了一系列专题调研。结合行业关注热点问题,推出了认可评审案例系列。前面的文…

macOS 新系统必知道:窗口分屏终于来了

对于很多从 Windows 转换到 macOS 的用户来说,最不习惯的一点可能就是窗口管理了。 Windows 系统自 Windows 7 开始就支持通过拖拽应用窗口至屏幕边缘来实现快速的分屏操作,到了 Windows 11 这一功能更是进化得更加灵活多变,允许用户根据需要…

临床常用的焦虑测评量表有哪些?

常笑医学整理了5个临床常用的焦虑测评量表,包括焦虑自评表(SAS)、状态-特质焦虑问卷(STAI)等。这些量表在常笑医学网均支持在线评估、下载和创建项目使用。 01 焦虑自评表(SAS) (完…

ECCV 2024 | 融合跨模态先验与扩散模型,快手处理大模型让视频画面更清晰!

计算机视觉领域顶级会议 European Conference on Computer Vision(ECCV 2024)将于9月29日至10月4日在意大利米兰召开,快手音视频技术部联合清华大学所发表的题为《XPSR: Cross-modal Priors for Diffusion-based Image Super-Resolution》——…

原宝,四周年快乐!

原神,公测于2020年9月28日开启。 现在已经是第4个年头了,7个国家已经开放了6个,来到了火之国。其实自从2022年继续开放游戏版号以来,好品质的二次元游戏、三端游戏也是层出不穷。无论是立绘,建模都有非常优秀的作品。…

柯桥学英语商务口语中老外最爱说的“what‘s up“是什么意思?回答错超尴尬!

“Whats up?” 在看美剧或者和老外聊天的时候 我们总能听到这句话 那你知道这句老外很爱说的 “whats up”是什么意思吗? 快和小编一起来学习吧~ 01 whats up 怎么理解? 很多人觉得Whats up就是更地道的“How are you”,嗯………

Tkinter制作登录界面以及登陆后页面切换(一)

Tkinter制作登录界面以及登陆后页面切换(一) 前言序言1. 由来2. 思路3. 项目结构描述4. 项目实战1. 登录界面实现(代码)2. 首页界面实现(代码)3. 打包build.py(与main.py同级目录)4.…

kafka发送消费核心参数与设计原理详解

核心参数详解: 发送端参数: 发送方式:默认值一般都是1: 重试参数 : 批量参数: 消费端参数: 自动提交参数: 如果是false,就是说消费完后不提交位移。也就是说比如之前消费的1-5.第N次还是消费到1-5.如果是false。那么第一次消费1-3,第二次消费4-5:默认是true:我们…

制定六西格玛人才培养方案需要考虑哪些因素?

当下,六西格玛作为一种先进的质量管理方法,被越来越多的企业采纳并应用于日常管理和流程优化中。然而,要成功实施六西格玛,关键在于培养一支具备高度专业素养和实战能力的六西格玛人才队伍。那么,制定六西格玛人才培养…

基于微信小程序的交友平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

软件游戏运行缺少vcruntime140.dll怎么办?总结四种有效简单方法

1. 文件基本信息 1.1 定义与作用 vcruntime140.dll是Microsoft Visual C 2015 Redistributable Package的一部分,它包含了C运行时库,用于支持使用Visual C开发的Windows应用程序。这个动态链接库(DLL)文件提供了程序执行时所需的…

可视化服务编排:jvs-logic API出参加密实战教程

在现代软件开发与系统集成的过程中,API(应用程序接口)非常重要,它能使不同系统之间连接,进行数据交换和功能调用。当然,数据交换的数据安全肯定是不可忽视的,为了确保数据在传输过程中的保密性和…

基于Java(Spring+Struts+Hibernate 框架)实现(Web)学生课程管理系统

课程管理系统设计文档 一、更新历史 二、引言 2.1 目的 本文档详细描述了课程管理系统的设计,达到引导开发的作用,同时实现测试人员以及用户的沟通。本文档面向开发人员,测试人员以及最终用户编写,是了解系统的导航。2.2 范围…