我读过使用 DTO 的主要原因之一是尽量减少服务层和远程前端之间的往返。最小化往返本质上意味着减少服务方法调用的数量,这是通过每次调用传输更多数据来完成的。
a) 但是不能通过具有很多参数的服务方法来减少往返吗?
b) DTO 是否能够比具有大量参数的服务方法更能减少往返次数?如果是,如何?如果不是,那么我不太明白如何减少往返次数是使用 DTO 的主要原因之一?
谢谢
我读过使用 DTO 的主要原因之一是尽量减少服务层和远程前端之间的往返。最小化往返本质上意味着减少服务方法调用的数量,这是通过每次调用传输更多数据来完成的。
a) 但是不能通过具有很多参数的服务方法来减少往返吗?
b) DTO 是否能够比具有大量参数的服务方法更能减少往返次数?如果是,如何?如果不是,那么我不太明白如何减少往返次数是使用 DTO 的主要原因之一?
谢谢
我们没有任何上下文,所以您所读内容的作者可能有其他意思,但在这种情况下,DTO 确实可以减少从表示层到服务层的往返次数。
假设您有一个页面,您必须在其中列出用户,并为每个用户显示该用户发布的答案数量。假设您的页面列出了 10 个用户。
如果您不使用 DTO,则必须调用一个方法来获取有关 10 个用户的信息。对于每个用户,您必须调用第二种方法来获取他发布的答案的数量。这进行了 11 次方法调用。
如果您使用 DTO 保存有关用户的显示信息,以及他的答案数量,您可以调用一个方法来获取 10 个用户的列表,并一次获取所有信息。
请注意,返回 10 个用户的列表,每个用户都包含其发布的答案列表不是一个选项,因为您将加载大量信息(每个用户的 2453 个答案)只是为了显示答案的数量。
除了 JB Nizet 在他的回答中提到的之外,我们一直在使用 DTO 来减少客户端和服务器之间传输的数据量。一种这样的情况是当我们需要一些参考数据或查找数据时。例如,如果我们有一个只读的 Country 集合,在视图或某种前端显示国家列表,我们不需要每次都传递国家列表。我们可以缓存集合,而 DTO 可用于仅传递 selectd 值。DTO 可以有国家代码,如“US”、“GB”、“IND”等,或者一些与国家代码相对应的唯一数值。在客户端,您可以有一个映射器,它将代码映射到 UI 小部件的选定值,如下拉列表。