【设计模式】JAVA Design Patterns——Data Transfer Object(数据传递对象模式)

🔍目的


次将具有多个属性的数据从客户端传递到服务器,以避免多次调用远程服务器

🔍解释


真实世界例子

我们需要从远程数据库中获取有关客户的信息。 我们不使用一次查询一个属性,而是使用DTO一次传送所有相关属性。

通俗描述

使用DTO,可以通过单个后端查询获取相关信息。

维基百科

在编程领域,数据传输对象(DTO)是在进程之间承载数据的对象。 使用它的动机是,通常依靠远程接口(例如Web服务)来完成进程之间的通信,在这种情况下,每个调用都是昂贵的操作。

因为每个(方法)调用的大部分成本与客户端和服务器之间的往返时间有关,所以减少调用数量的一种方法是使用一个对象(DTO)来聚合将要在多次调用间传输的数据,但仅由一个调用提供。

程序示例

创建一个简单的CustomerDTO 类

public class CustomerDto {private final String id;private final String firstName;private final String lastName;public CustomerDto(String id, String firstName, String lastName) {this.id = id;this.firstName = firstName;this.lastName = lastName;}public String getId() {return id;}public String getFirstName() {return firstName;}public String getLastName() {return lastName;}
}

创建CustomerResource 类充当客户信息的服务器。

public class CustomerResource {private final List<CustomerDto> customers;public CustomerResource(List<CustomerDto> customers) {this.customers = customers;}public List<CustomerDto> getAllCustomers() {return customers;}public void save(CustomerDto customer) {customers.add(customer);}public void delete(String customerId) {customers.removeIf(customer -> customer.getId().equals(customerId));}
}

从而拉取客户信息就简单了

 

    var allCustomers = customerResource.getAllCustomers();allCustomers.forEach(customer -> LOGGER.info(customer.getFirstName()));// Kelly// Alfonso

🔍类图

🔍适用场景

使用数据传输对象模式当

  • 客户端请求多种信息。信息都是相关的
  • 当你想提高获取资源的性能
  • 你想降低远程方法调用的次数

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

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

相关文章

部署LAMP环境

红帽9搭建LAMP 安装Apache 2.安装数据库服务 3.安装php (1)使用IP访问/phpinfo.php 4.安装phpMyAdmin &#xff08;1&#xff09;数据库端口改为学号后五位 &#xff08;2&#xff09;登录phpmyadmin 5.SSH增加一个端口10022&#xff0c;fttp增加两个端口10080和8080 &#xf…

OceanBase 回收站功能(社区版4.2.1.0)

概述 回收站默认是关闭的。如果开启的话&#xff0c;回收站里包含 OB 被删除的对象(租户&#xff0c;表&#xff0c;索引&#xff0c;database等)。当删除OB某个对象后&#xff0c;该对象会进入回收站&#xff0c;删除对象的存储空间并不会被释放&#xff0c;仍然占用物理空间…

李廉洋:5.29黄金震荡,原油持续走高,今日美盘行情走势分析及策略。

黄金消息面分析&#xff1a;当前美国存在一个令人担忧且未被充分关注的问题&#xff1a;房地产行业低迷、高利率和抵押贷款利率、租金高涨以及美联储的紧缩政策构成了一个恶性循环。由于高房价和高抵押贷款利率&#xff0c;美国住房经济活动远低于两年前的水平。为了让该行业好…

Apache、Nginx、IIS文件解析漏洞

目录 1、文件解析漏洞介绍 2、Apache相关的解析漏洞 &#xff08;1&#xff09;多后缀解析漏洞 &#xff08;2&#xff09;Apache配置问题 &#xff08;3&#xff09;换行符解析漏洞 &#xff08;4&#xff09;罕见后缀解析 3、Nginx相关的解析漏洞 &#xff08;1&…

记录帖 ES的RestApi使用

索引库操作 import org.apache.http.HttpHost; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.client.indices.CreateIndexRequest; import …

AcWing 1047.糖果

这里介绍一种可行的方案&#xff0c;但是对于本题来说&#xff0c;数据范围是不能达到要求的&#xff1a; 也就是设置一个状态&#xff0c;表示j这个数能不能满足最大糖果个数。j这个数需要满足是k的倍数。 这样其实就简单&#xff0c;我们只需要对于状态是否进行转移就行了&…

《java数据结构》--栈的详解

一.栈的认识 栈是一种不同于链表和顺序表的储存数据结构&#xff0c;它对存储数据和取出数据有着特殊的要求&#x1f914;。 首先栈只能从一端存储数据&#xff0c;也就是从一端进&#xff0c;还从这一端出这也是栈最大的特点&#xff0c;这也导致在栈中存取数据都必须遵循先…

C++线程任务队列模型

功能描述 实现一个任务队列&#xff0c;用于任务的执行 任务队列 任务队列可以添加、删除任务&#xff0c;实现对任务的管理添加任务后&#xff0c;任务队列可以开始执行任务队列执行任务方式为串行执行 任务 任务执行需要持续一段10s内随机的时间&#xff0c;执行过程通过…

将C++ cv:mat 通过JNI 转换为jbtyearray,传到android端

cv::Mat result ; //此处为C获取到的cv::mat结果对象// 编码为JPEG格式std::vector<uchar> buf;cv::imencode(".jpg", result, buf);// 创建一个新的jbyteArray并设置其大小jbyteArray array env->NewByteArray(buf.size());if (array NULL) {// 处理内存…

打造爆款活动:确定目标受众与吸引策略的实战指南

身为一名文案策划经理&#xff0c;我深知在活动策划的海洋中&#xff0c;确定目标受众并设计出能触动他们心弦的策略是何等重要。 通过以下步骤&#xff0c;你可以更准确地确定目标受众&#xff0c;并制定出有效的吸引策略&#xff0c;确保活动的成功&#xff1a; 明确活动目…

【跨平台的UI自动化测试框架】

下面是基于Airtest和Poco自动化测试框架的模板&#xff0c;并包含使用测试套件执行的方法说明。Airtest是一个跨平台的UI自动化测试框架&#xff0c;而Poco是一个用于UI元素定位的辅助库。 项目结构 your_project/ ├── test_suite/ │ ├── __init__.py │ ├── t…

【Oracle篇】rman标准化全库备份策略:完整备份or增量备份(第三篇,总共八篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

单元测试框架Pytest的基本操作

Pytest基本操作 1. 详解1.1 命名规则:1.2 自定义查找规则:1.3 3种运行方式1.4 执行顺序2. 断言2.1 定义2.2 断言的规则3. mark3.1 mark的作用3.2 mark的标记方式3.3 注册标签名3.4 skip跳过标记4. pytest的参数化5. pytest的夹具(fixture测试夹具)5.1. 作用5.2. 夹具应用场…

web前端框架设计第十一课-常用插件

web前端框架设计第十一课-常用插件 一.预习笔记 1.路由的基础使用 2.动态路由 3.嵌套路由 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药&#xff0c;犹豫拖延将不断滋养恐惧

Web渗透-MySql-Sql注入:联合查询注入

SQL注入&#xff08;SQL Injection&#xff09;是一种网络攻击技术&#xff0c;攻击者通过将恶意的SQL代码插入到应用程序的输入字段&#xff0c;从而欺骗应用程序执行未经授权的操作。这种攻击方式可以导致严重的安全问题&#xff0c;包括&#xff1a; 数据泄露&#xff1a;攻…

windows和linux下的库文件比较

在Windows和Linux操作系统中&#xff0c;库文件&#xff08;lib、dll、.a、.so&#xff09;都扮演着重要的角色&#xff0c;但它们之间存在一些关键的区别。以下是这些库文件之间的主要差异&#xff1a; Windows lib 静态链接库&#xff08;Static Link Library&#xff09;…

UE5 UE4 快速定位节点位置

在材质面板中&#xff0c;找到之前写的一个节点&#xff0c;想要修改&#xff0c;但是当时写的比较多&#xff0c;想要快速定位到节点位置. 在面板下方的 Find Results面板中&#xff0c;输入所需节点&#xff0c;找结果后双击&#xff0c;就定位到该节点处。 同理&#xff0c;…

CGAL 获取网格相交面片

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里使用CGAL中的方法获取两个网格相交的面片,原理其实很简单,就是单纯的对每个面片进行相交测试,不过为了加快计算效率,CGAL中采用了AABB树这一结构来实现了这一过程。 二、实现代码 #include <iostream&g…

【CUDA】Nsight profile驱动的CUDA优化

前置准备 安装NVIDIA Nsight Compute。 安装好后选择使用管理员权限启动下载官方 Demo 代码官方博客Shuffle warp 1. 任务介绍及CPU版本 1.1 任务介绍 任务理解&#xff1a; 有一个 L x M 的矩阵 M 1 M_1 M1​ 对其每行取平均值 得到 V 1 ∈ R L 1 V_1 \in \mathbb{R}^{…

pikachu—exec“eval“

这是原画面 然后呢&#xff1f; 我们知道会传入到后台rce_eval.php来处理然后通过 eval()是啥? 在eval括号里面可以执行外来机器的命令 然后我们通过php的一个内置的命令 我们通过phpinfo()&#xff1b; 这是输入后的结果