【问题标题】:WebAPI DTO Response-Request Messaging PatternWebAPI DTO 响应-请求消息模式
【发布时间】:2014-06-21 23:29:14
【问题描述】:

我正在阅读一本关于 C# 中的响应消息模式的书中的一章,当我最近遇到一个使用 Web API 的项目时,我注意到了一些相似之处,并希望对某些事情有所了解。

在本书中,作者的代码将请求(在本例中为 CustomerRequest)包装在一个名为 CustomerRequestService 的类中,该类的工作是处理这些请求(请求只不过是具有诸如搜索词或与寻找客户的服务并且什么都不做,非常瘦/贫血(?)我想你可以说)。该服务返回一个 CustomerResponse,其中包含一个客户类、来自服务器的响应以及其他相关信息,这些信息将在服务器端用于向用户显示结果。

现在,在我正在查看的项目中,有一些网页可以对 web api 控制器进行 ajax 调用。控制器处理这些请求并用它们自己的响应进行响应。它使用 json.net 进行反序列化。

你可以说这非常相似。在书中,作者将这些请求-响应称为请求-响应,在代码中,它们被命名为 CustomerDto、CustomerResponseDto(当然 DTO 代表数据传输对象)。

当我在网上搜索时,似乎当我搜索 webAPI 时,命名标准围绕 DTO 而不是响应/请求。

也许我正在分裂头发,或者这很可笑且无关紧要,但在这样的场景中很好奇其他人如何命名他们的请求/响应类。我喜欢调用所有请求/响应的想法,即使在 web api 架构中也是如此,但我不确定这样命名是否不正确,我应该将它们称为 Dtos。

我猜唯一的区别是一个东西被序列化并以 JSON 的形式发送回网页,另一个仍然作为一个类。

谢谢,如果我解释正确,请告诉我!

【问题讨论】:

  • 您可以随意命名它们。只要确保你与命名事物一致。 UserUserDtoUserRequestDto 都是非常好的例子。
  • 谢谢。 UserRequest 和 UserResponse 似乎对我有好处。除非其他人有想法,否则我会坚持下去。你会说这是请求-响应模式,不管它是在 web api 中使用还是纯粹在服务器端使用而不被 web 控制器使用并作为反序列化的 JSON 数据返回到前端?

标签: c# asp.net-web-api json.net dto


【解决方案1】:

如果您不进行单独的请求和响应对象,您最终会得到:

1. 传输整个 DTO,例如。由 56 列数据组成。

2. 而您的要求是只绑定一个包含键值对的下拉列表,即只有两列。

或者,您可以理解,虽然只需要 5-7 kb 的数据传输,但您正在传输 57 kb 的无用数据。这样你只是在浪费带宽,对服务器和网络上的整个应用程序负载的性能产生不利影响。如果您优化了 DTO 来满足您的需求,您最终会得到超快速的应用程序,即使在最坏的情况下也可以在 2G 连接上加载。

【讨论】:

    【解决方案2】:

    您可以随意命名它们(一如既往,保持一致),但对我来说,在这种情况下使用 DTO 而不是 Request/Response 更有意义。 DTO 用于双向传输数据——从客户端到服务器,反之亦然。所以它在请求和响应中都使用。

    【讨论】:

    • 没错,我也是这么想的——应该在 Web API 中使用 DTO,因为它会作为 JSON 数据返回到页面,而如果您是在纯粹的服务器端操作并与服务交互某种层,它是一个请求-响应对象,可以这样命名。你怎么看?
    • @user3520332 无论是不是纯粹的服务器端,我认为命名一个请求-响应对象不同的名称(即CustomerRequest/CustomerResponse)只有在它们是不同的对象时才应该这样做——如果它们是相同的那么这只会产生不必要的命名混乱。
    • 这些绝对是不同的类(请求和响应)。但是你会说使用 DTO 命名与请求/响应无关吗?
    • @user3520332 归根结底,是的 - 与命名有关的最重要的事情是使其保持一致并传达含义。
    猜你喜欢
    • 1970-01-01
    • 2012-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多