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


    🔍目的


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

    🔍解释


    真实世界例子

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

    通俗描述

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

    维基百科

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

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

    程序示例

    创建一个简单的CustomerDTO 类

    1. public class CustomerDto {
    2. private final String id;
    3. private final String firstName;
    4. private final String lastName;
    5. public CustomerDto(String id, String firstName, String lastName) {
    6. this.id = id;
    7. this.firstName = firstName;
    8. this.lastName = lastName;
    9. }
    10. public String getId() {
    11. return id;
    12. }
    13. public String getFirstName() {
    14. return firstName;
    15. }
    16. public String getLastName() {
    17. return lastName;
    18. }
    19. }

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

    1. public class CustomerResource {
    2. private final List customers;
    3. public CustomerResource(List customers) {
    4. this.customers = customers;
    5. }
    6. public List getAllCustomers() {
    7. return customers;
    8. }
    9. public void save(CustomerDto customer) {
    10. customers.add(customer);
    11. }
    12. public void delete(String customerId) {
    13. customers.removeIf(customer -> customer.getId().equals(customerId));
    14. }
    15. }

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

     

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

    🔍类图

    🔍适用场景

    使用数据传输对象模式当

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

  • 相关阅读:
    Redis 三种特殊的数据类型 - Geospatial地理位置 - Hyperloglog基数统计的算法 - Bitmaps位图(位存储)
    软件测试/测试开发丨利用人工智能自动找Bug
    看完这个你还不懂shiro吗,小例子(附源码)
    a标签下载文件与解决浏览器默认打开某些格式文件的问题
    Python async模块使用(杂文)
    就推荐 4 个 yyds 的开源项目
    Dubbo3.0新特性
    移动端页面适配
    Java --- JVM的执行引擎
    2022-09-07 mysql/stonedb-多线程遍历元组问题分析
  • 原文地址:https://blog.csdn.net/CSBIGDOG/article/details/139253597