领域驱动模型VO,BO,PO,DO,DTO概念及其区别

news/2024/10/31 1:31:58/

本文来说下领域驱动模型VO,BO,PO,DO,DTO 概念及其区别

文章目录

  • 概述
  • 概念以及区别
  • 本文小结


概述

随着编程工业化水平的不断加深,各种编程模型层出不穷(比如MVC,MVP等等),伴随着这些编程模型,又有一大批新的概念蜂拥而至,什么VO,BO,PO,DO,DTO之类的,这些新的概念一直以来都是云里雾里,网上虽然也有不少文章来区分这些概念,但看下来基本都是几篇相同的文章转载来转载去,这些文章本身也说的不明,有些还互相矛盾,再加上有些文章在简化系统里面来使用这些概念,让人越看越迷糊。

领域驱动模型整体的框架方向是构建业务中台,划分子域、上下文、需求结构化和能力可配置,是通过领域驱动,从整体上划分业务中台的领域,进而划分出业务中台的具体能力中心。本篇文章开始,将会结合自己的实际经验,聊一聊DDD(领域驱动设计)的应用。这里主要聊下我们经常会用的的领域模型:VO,BO,PO,DO,DTO。

看完图估计大部分人就已经有了一个直观的感受了

在这里插入图片描述


概念以及区别

VO (View Object)视图对象

用于展示层,它的作用是把某个指定页面(或组件)的所有数据封装起来。说白了,就是在service层返回给前端页面展示的数据信息,也就是平时看到的网页列表中展示的数据信息。

DTO(Data Transfer Object)数据传输对象

这个传输通常指的前后端之间的传输。可以看做前端传给后端的参数,然后在controller中又传入service层中的那个参数。

DTO是一个比较特殊的对象,他有两种存在形式:

在后端,他的存在形式是java对象,也就是在controller里面定义的那个东东,通常在后端不需要关心怎么从json转成java对象的,这个都是由一些成熟的框架帮你完成啦,比如spring框架。

在前端,他的存在形式通常是js里面的对象(也可以简单理解成json),也就是通过ajax请求的那个数据体。

这也是为什么把他画成横跨两层的原因。

PO(Persistant Object)持久对象

PO比较好理解,简单说PO就是数据库中的记录,一个PO的数据结构对应着库中表的结构,表中的一条记录就是一个PO对象。

通常PO里面除了get,set之外没有别的方法,对于PO来说,数量是相对固定的,一定不会超过数据库表的数量。等同于Entity,这俩概念是一致的

BO(Business Object)业务对象

BO就是PO的组合,数据库里面多个PO对象构成的相对复杂的对象

简单的例子比如说PO是一条交易记录,BO是一个人全部的交易记录集合对象

复杂点儿的例子PO1是交易记录,PO2是登录记录,PO3是商品浏览记录,PO4是添加购物车记录,PO5是搜索记录,BO是个人网站行为对象

BO是一个业务对象,一类业务就会对应一个BO,数量上没有限制,而且BO会有很多业务操作,也就是说除了get,set方法以外,BO会有很多针对自身数据进行计算的方法

为什么BO也画成横跨两层呢?原因是现在很多持久层框架自身就提供了数据组合的功能,因此BO有可能是在业务层由业务来拼装PO而成,也有可能是在数据库访问层由框架直接生成

很多情况下为了追求查询的效率,框架跳过PO直接生成BO的情况非常普遍,PO只是用来增删改使用

DO(Domain Object)领域对象

就是从现实世界中抽象出来的有形或无形的业务实体。

等等,DO是什么

DO呢,标题不是还有个DO么?

上面这些概念基本上已经涵盖了全部的流程,DO只是跟其中一个概念相同

但是跟哪个概念相同呢?

现在主要有两个版本

一个是阿里巴巴的开发手册中的定义

DO( Data Object)这个等同于上面的PO

另一个是在DDD(Domain-Driven Design)领域驱动设计中

DO(Domain Object)这个等同于上面的BO


本文小结

说白了,领域驱动模型VO,BO,PO,DO,DTO就是MVC三层中各种的实体对象,只是换了一个名称而已。在平时的开发中,按照自己的想法来给实体取名字也是可以,没有强制的要求。


http://www.ppmy.cn/news/523529.html

相关文章

别了,DjVu!

原帖地址:http://www.comicer.com/stronghorse/water/software/djvu886.htm 别了,DjVu! 作者:马健 邮箱:stronghorsetom.com 主页:http://www.comicer.com/stronghorse 发布:2010.05.21 目录 一…

领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处

本篇文章主要讨论一下我们经常会用到的一些对象:VO、DTO、DO和PO。 由于不同的项目和开发人员有不同的命名习惯,这里我首先对上述的概念进行一个简单描述,名字只是个标识,我们重点关注其概念: 概念: VO&a…

探索GaussDB(DWS)的过程化SQL语言能力

摘要:在当前GaussDB(DWS)的能力中主要支持两种过程化SQL语言,即基于PostgreSQL的PL/pgSQL以及基于Oracle的PL/SQL。本篇文章我们通过匿名块,函数,存储过程向大家介绍一下GaussDB(DWS)对于过程化SQL语言的基本能力。 本文分享自华为…

基于DGUS II 实现高性能GUI

前言 2019年迪文推出了T5L系列芯片,同时还更新了针对它的第二代DGUS软件——因为大多数功能以及设置都与T5平台相通,所以T5L系列所使用的DGUS软件依然是第二代的范畴。 跟T5与K600平台之间差别的情况不同,因为采用了相近的底层逻辑&#xff0…

修普诺斯游戏测评报告

修普诺斯测评报告 目录 1.游戏简介 2.美术表现 2.1.开场cg登陆、加载界面 2.2.音乐音效 2.3.角色模型 2.4.UI 2.5.战斗场景战斗表现 3.游戏内容 3.1.养成系统 3.2.PVE玩法 3.3.PVP玩法 4.核心玩法 5.付费点 5.1.首充破冰后续付费 5.2.成长基金等其他付费点 5.3.限时礼包 …

NYOJ-20 吝啬的国度【深搜】

描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重…

克诺斯虚拟化服务器,超强遗传 VA1 克拉诺斯Kronos

原标题:超强遗传 VA1 克拉诺斯Kronos 狼王 VA1 克拉诺斯Kronos von Nrburgring 2013 和 2014年意大利本部展都是VA。 2014年9月 SV本部展获得VA。 2014年引进中国后参加中国CSV本部展(与SV本部展相隔一个月,没有时间在国内适应环境训练等情况下直接参赛)…

DjVu,版式文档领域一颗璀璨的流星

早上起来看新闻,被一则勒索病毒的报道震惊了: 其中的Read Me.txt文件指出:受害人的文件(照片,文档,数据库和所有其他数据)已被加密成.djvu文件,只能通过购买BigBobRoss提供的特定工具…