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

server/2024/9/23 11:12:49/

🔍目的


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

🔍解释


真实世界例子

我们需要从远程数据库中获取有关客户的信息。 我们不使用一次查询一个属性,而是使用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.ppmy.cn/server/44848.html

相关文章

c++【入门】你多大了

时间限制 : 1 秒 内存限制 : 128 MB 一天玩仔跑来问周周你多大了&#xff0c;周周告诉他自己 1010 岁了&#xff0c;玩仔又说自己也是&#xff0c;你听到了这个对话&#xff0c;想用程序显示出两个人的对话内容&#xff0c;现在就来试一试吧。 输入 无 输出 输出三行&…

pod容器基础概念

一 Pod基础概念&#xff1a; ①Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个 Pod代表着集群中运行的一个进程。一个pod包含一个或多个容器。如&#xff1a;应用容器/业务容器&#xff08;淘 宝、京东、拼多多后台&#xff…

【代码随想录】【算法训练营】【第21天】 [530]二叉搜索树的最小绝对差 [501]二叉搜索树的众数 [236]二叉树的最近公共祖先

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 21&#xff0c;天气不错的周二~ 题目详情 [530] 二叉搜索树的最小绝对差 题目描述 530 二叉搜索树的最小绝对差 解题思路 前提&#xff1a;二叉搜索树 思路&#xff1a;根据二叉搜索树的中…

linux系统的逻辑卷管理及磁盘配额

目录 逻辑卷管理 磁盘配额 逻辑卷管理 lvm&#xff1a;logical volume manager 逻辑卷管理 linux系统下对硬盘分区的一种管理机制。 lvm机制特别适合于管理大存储设备&#xff0c;可以动态的对硬盘进行扩容。 逻辑上的磁盘&#xff0c;概念上的磁盘&a…

第四章:条件查询

一、where 字句 使用where对表中数据筛选&#xff0c;符合条件的数据&#xff0c;会出现select后面的* 或字段名&#xff0c;决定返回什么样的字段select中where子句&#xff0c;决定返回了什么记录 语法 select 字段1,字段2 from 表名 where 条件; 例子 /* 在students查询…

MySQL忘记密码怎么办?教你无密码登录

MySQL免密钥登录 文章目录 MySQL免密钥登录一、修改配置文件二、无密码登录三、修改root密码四、使用新密码登录 一、修改配置文件 # 这个配置项的意思是告诉mysql跳过权限验证&#xff0c;允许任何用户以任何密码登录 [rootmysql ~]# echo "skip-grant-tables" >…

介绍Django Ninja框架

文章目录 安装快速开始特性详解自动文档生成定义请求和响应模型异步支持中间件支持测试客户端 结论 Django Ninja是一个基于Python的快速API开发框架&#xff0c;它结合了Django和FastAPI的优点&#xff0c;提供了简单易用的方式来构建高性能的Web API。 安装 使用以下命令安…

机器学习-3-特征工程的重要性及常用特征选择方法

参考特征重要性:理解机器学习模型预测中的关键因素 参考[数据分析]特征选择的方法 1 特征重要性 特征重要性帮助我们理解哪些特征或变量对模型预测的影响最大。 特征重要性是数据科学中一个至关重要的概念,尤其是在建立预测性任务的模型时。想象你正在尝试预测明天是否会下…