首页 > 其他分享 >一文读懂DTO、BO、AO、PO、DO、DAO等含义与使用方法

一文读懂DTO、BO、AO、PO、DO、DAO等含义与使用方法

时间:2024-06-13 09:29:11浏览次数:11  
标签:DO DAO DTO 示例 Object private 设计模式

在Java开发中,这些术语代表了不同的对象设计模式和架构层面的概念,用于组织和管理代码。下面是它们的详细解释及示例:

1. DAO (Data Access Object)

含义:DAO是一种设计模式,用于封装对数据源(通常是数据库)的访问。它将低级别的数据访问逻辑(如SQL查询和事务管理)从业务逻辑中分离出来。

示例:

public interface UserDao {
    UserEntity findById(int id);
    List<UserEntity> findAll();
    void save(UserEntity user);
    void delete(int id);
}

2. DTO (Data Transfer Object)

含义:DTO用于封装数据,以便于在不同的层之间进行数据传输。它通常包含用于展示或传输的数据,不包含业务逻辑。

示例:

public class UserDto {
    private int id;
    private String username;
    private String email;

    // Getters and Setters
}

3. DO (Domain Object)

含义:DO有时与PO(Plain Old Java Object for persistence)混淆使用,代表领域模型中的对象,直接映射到数据库中的表结构,但更侧重于表达业务领域的概念。

示例:

public class UserDo {
    private Integer userId;
    private String username;
    private String password;

    // Getters and Setters
}

4. VO (View Object)

含义:VO是专门为视图层设计的对象,包含用于展示的数据。它可能包含DTO的部分或全部数据,也可能有额外的计算属性或格式化后的数据。

示例:

public class UserVo {
    private int displayId;
    private String displayName;
    private String formattedEmail;

    // Getters and Setters
}

5. AO (Application Object)

含义:AO较少提及,它通常指的是应用程序级的对象,可以理解为一种全局状态或上下文对象,存储整个应用程序生命周期中需要共享的信息。

6. BO (Business Object)

含义:BO封装了业务逻辑,通常包含对多个DAO的操作,处理复杂的业务规则。

示例:

public class UserService {
    private UserDao userDao;

    public UserVo createUser(UserDto userDetails) {
        UserDo newUser = new UserDo();
        // 转换Dto到Do,执行业务逻辑
        // ...
        userDao.save(newUser);
        return convertToVo(newUser);
    }

    // 将Do转换为Vo的辅助方法
    private UserVo convertToVo(UserDo userDo) {
        // ...
    }
}

7. POJO (Plain Old Java Object)

含义:POJO是指那些没有遵循特定框架或设计模式的简单Java对象,不包含任何额外的继承或实现。

示例:

public class SimpleObject {
    private String someProperty;

    // Getters and Setters
}

8. PO (Persistence Object) / Entity

含义:在ORM框架(如Hibernate)中,PO或Entity通常指的是直接映射到数据库表的Java类,包含了表的字段作为属性,以及对应的getter和setter方法。

示例(与DO示例类似):

// 示例见DO部分

9. Model

含义:在MVC架构中,Model代表数据模型,可以是POJO、DO、Entity等,负责封装数据和业务逻辑。

10. View

含义:View是MVC架构的一部分,负责展示数据给用户,通常与VO紧密相关。

以上概念在不同的项目和团队中可能会有所差异,关键在于理解它们背后的设计意图和分层理念,根据实际情况灵活运用。

深入探讨设计模式与架构层次的融合应用

在现代Java开发实践中,上述设计模式与架构组件的恰当融合对于构建可维护、可扩展的应用系统至关重要。它们不仅定义了代码的组织结构,还指导着开发者如何解耦复杂性,确保各部分职责明确,促进团队协作和项目的长期健康发展。

DAO与Repository模式的融合

尽管DAO模式本身已非常实用,但在某些场景下,将其与Repository模式结合使用能进一步提升数据访问层的抽象级别。Repository模式提供了一个更高层次的接口,用于定义获取、存储和查询领域对象的合同,而具体的DAO实现则隐藏在内部。这种设计不仅促进了领域模型的纯净性,还便于引入缓存策略、数据源切换等优化措施。

DTO与VO的互补运用

DTO和VO虽有相似之处,但它们的核心应用场景存在细微差别。DTO主要关注于数据在不同服务或层之间的传输,强调数据的传递效率和完整性。而VO则更侧重于数据的展示逻辑,可能包括对DTO数据的进一步加工和格式化,以满足用户界面的具体需求。在实际开发中,根据前后端分离的原则,合理划分DTO与VO的边界,可以有效提升系统的可读性和可维护性。

BO与Service Layer的整合

业务对象(BO)的设计往往与服务层紧密结合,服务层作为业务逻辑的主要执行场所,负责协调不同的DAO操作,执行复杂的业务规则,并可能涉及事务管理。通过在BO中封装这些逻辑,服务层能够保持简洁明了,易于测试和复用。同时,服务层还应考虑诸如安全性检查、权限控制等横切关注点的集成,确保业务操作的合规性。

POJO与框架的无侵入性设计

POJO的精髓在于其简单性和通用性,使得对象不依赖于特定框架或库,这在实现框架无关性、促进代码的可移植性方面极为重要。现代框架设计倾向于最大限度地减少对POJO的污染,比如Spring框架通过注解和配置来增强POJO的功能,而非要求其继承特定类或实现特定接口,这体现了面向接口而非实现的设计哲学。

Model的多维度理解

在不同上下文中,“Model”一词有着丰富的内涵。在MVC架构中,它代表了数据模型和业务逻辑;在领域驱动设计(DDD)中,Model则涵盖了实体(Entity)、值对象(Value Object)、聚合根(Aggregate Root)等核心概念,深度体现了领域知识和业务规则。正确理解和应用Model的多维度特性,是构建高质量软件的关键。

总之,理解并灵活运用这些设计模式和架构概念,能够帮助开发者构建更加健壮、可扩展和易于维护的Java应用系统。在实际项目中,根据具体情况选择合适的设计模式,不断优化架构设计,是持续提升软件工程实践水平的有效途径。

标签:DO,DAO,DTO,示例,Object,private,设计模式
From: https://blog.csdn.net/qq_19812507/article/details/139642234

相关文章

  • 意外停电致hadoop所有namenode节点无法启动故障处理
    环境hadoop(版本:3.3.5)集群由3个datanode(dn)节点组成,其中2个namenode(nn)节点,采用QJM(QuorumJournalManager)方案组建高可用服务。问题描述与处理单位意外断电导致hdfs服务不可用,尝试重启服务:myhadoop.shstopmyhadoop.shstart多次执行jpsall观察各服务启动情况,发现na......
  • 【Ubuntu双系统】两块硬盘分别安装系统,一块硬盘安装Ubuntu 一块安装Windows
    【Ubuntu双系统】两块硬盘分别安装双系统,一块硬盘安装Ubuntu一块安装Windows前言安装Ubuntu前置操作安装过程参考文献前言机器情况:两块1T的硬盘,其中一块已安装Windows11现需在另一块硬盘上安装Ubuntu,该硬盘还未初始化Ubuntu安装参考教程来自:【ubuntu20.04】10分钟......
  • [GDOI2014] 世界杯&[AHOI2001] 彩票摇奖&[NOIP2009 普及组] 分数线划定
    [GDOI2014]世界杯de题目描述(复制的题目可能有错,请用你手头上的)3014年世界杯足球赛就要开始了!作为卫冕冠军中国足球队的教练,手下每位球员都是猛将,如何摆出最强的11人阵容也是一件幸福的烦恼事啊。众所周知,足球阵容里的11个球员都会被分配到场上某一个特别的位置,而这......
  • 【网络安全的神秘世界】2024.6.6 Docker镜像停服?解决最近Docker镜像无法拉取问题
    ......
  • 【C++】多线程(基于Windows以及pthread库)
    文章目录一、前言1.1进程和线程二、创建线程2.1线程函数pthread_self(void)2.2创建线程三、线程退出3.1线程函数pthread_exit()四、线程回收4.1线程函数pthread_join()4.2线程数据回收五、线程分离5.1线程函数pthread_detach()六、C++线程类七、线程同......
  • Windows 服务器Nginx 下载、部署、配置流程(图文教程)
    不定期更新目录一、下载Nginx安装包二、上传安装包三、启动Nginx四、Nginx常用命令五、Nginx(最小)配置详解 六、Nginx(基础)配置详解七、反向代理八、负载均衡九、动静分离十、报错 一、下载Nginx安装包四个网址,根据自己的情况选择,我是用Nginx开源版的。1、下载......
  • 系统内存占用下降 20%,卓创网络应用 OpenCloudOS 实践
    导语:卓创网络作为一家专注于招标采购领域的企业,主营产品「招采星」为超过4000家公司提供电子采购系统及相关配套服务,在使用OpenCloudOS后,系统内存占用由原来的33%降低到11.7%,下降20%+。本文将深入探讨卓创网络从传统架构到OpenCloudOS的转变,分析这一转变带来的技术优势......
  • Windows电脑安装Apache JMeter的详细教程
    前言作为一名测试工程师,性能测试是我们工作中不可或缺的一部分。而ApacheJMeter作为一款开源的性能测试工具,以其强大的功能和广泛的适用性,成为了许多测试工程师的首选。本篇文章将详细介绍如何在Windows电脑上安装JMeter。安装Java环境在安装JMeter之前,需要确保系统已经安装......
  • 用Napi编写nodejs Addon并调用dll
    用Napi编写nodejsAddon并调用dllnpdejs调用C++addon并没有先前那篇随笔那么复杂,这是一篇补充说明:说明如何使用c++项目的include头文件以及lib,dll引入到addon内使用一、使用VS编写DLL导出项目步骤1:通过VisualStudio(推荐2019及其以上)新建一个“具有导出项的(DLL)动态链接库......
  • 使用spark-sql处理Doris大表关联
    背景最近项目上有一个需求,需要将两张表(A表和B表)的数据进行关联并回写入其中一张表(A表),两张表都是分区表,但是关联条件不包括分区字段。分析过程方案一最朴素的想法,直接关联执行,全表关联,一条SQL搞定全部逻辑。想法越简单,执行越困难。由于数据量大,服务器规模较小,尽管各台服务......