asp.net

DTO 模式(数据传输对象)

2024-06-17

1. 概述

在本教程中,我们将讨论DTO 模式、它是什么以及何时使用它。到最后,我们将知道如何正确使用它。


2. 模式

DTO 或数据传输对象是在进程之间传输数据以减少方法调用次数的对象。马丁·福勒(Martin Fowler)在他的《EAA》一书中首次引入了这种模式。

Fowler 解释说,该模式的主要目的是通过在单个调用中批处理多个参数来减少到服务器的往返。这减少了此类远程操作中的网络开销。

另一个好处是序列化逻辑的封装(将对象结构和数据转换为可以存储和传输的特定格式的机制)。它提供了序列化细微差别的单点更改。它还将域模型与表示层分离,允许两者独立更改。


3. 如何使用?

DTO 通常创建为POJO。它们是不包含业务逻辑的平面数据结构。它们仅包含存储、访问器以及与序列化或分析相关的最终方法。

数据通常通过表示或立面层中的映射器组件从域模型映射到 DTO。

下图说明了组件之间的交互:

dto使用.png

4. 何时使用?

DTO 在具有远程呼叫的系统中派上用场,因为它们有助于减少远程呼叫的数量。

当域模型由许多不同的对象组成并且表示模型需要同时使用其所有数据时,DTO 也会有所帮助,或者它们甚至可以减少客户端和服务器之间的往返。

使用 DTO,我们可以从我们的领域模型中构建不同的视图,允许我们创建同一领域的其他表示形式,但根据客户的需求对其进行优化,而不会影响我们的领域设计。这种灵活性是解决复杂问题的有力工具。


5. 使用案例

为了演示该模式的实现,我们将使用一个简单的应用程序,其中包含两个主要域模型,在本例中为“用户”和“角色”。为了关注模式,让我们看两个功能示例 — 用户检索和创建新用户。


5.1. DTO与域

以下是两种模型的定义:

此时,请务必注意,DTO 表示从 API 客户端发送或发送到 API 客户端的模型。