代码之家  ›  专栏  ›  技术社区  ›  Nariman Esmaiely Fard

webservice中DTO的命名约定是什么

  •  2
  • Nariman Esmaiely Fard  · 技术社区  · 6 年前

    我正在设计一个restful web服务,我想知道应该给DTO起什么名字。我可以使用像Request和Response这样的后缀吗?例如,对于addUser服务,将有两个名为AddUserRequest和AddUserResponse的DTO。

    3 回复  |  直到 6 年前
        1
  •  1
  •   John Deters    6 年前

    您的组织是否已有描述您传入的规范用户的架构?如果您使用的是该模式,那么您当然会使用该模式中的名称。否则,请像描述任何类或模式元素一样描述它们。

    请注意,由于DTO不包含自己的方法,因此您可能不会给它命名为动作动词。

    但是,请考虑调用它们AddUserRequest和AddUserResponse,尤其是如果该方法需要的信息比常规用户DTO更多的话。这符合接口分离原则,因为您的接口参数应该专门针对请求本身进行定制(它不应该需要与请求无关的元素;您不应该有更改请求的函数类型参数,这些参数应该提取到它们自己的调用中。)AddUserRequest可能包含一个名为User的元素,该元素保存用户特定的数据,另一个元素保存请求上的其他关联数据集,可能是组或访问权限,诸如此类。

        2
  •  1
  •   Pritam Banerjee Ashish Karnavat    6 年前

    DTO(数据传输对象)类似于POJO(普通的旧Java对象)。它应该只有 getters setters 而不是任何业务逻辑。

    来自Wikepedia:

    数据传输对象是在 过程。使用它的动机是 流程通常通过远程接口(例如web)完成 服务),其中每个呼叫都是昂贵的操作。因为 每次通话的大部分费用与往返时间有关 在客户端和服务器之间,减少 调用是使用一个对象(DTO)来聚合 可能会被几个电话转接,但已经接通了 只需一次通话。

    数据传输对象与业务对象或 数据访问对象是指DTO没有任何行为,除了 用于存储和检索自己的数据(变异器和访问器)。 DTO是不应包含任何业务逻辑的简单对象 这需要测试。

    此模式通常在远程接口之外被错误使用。 这引发了作者的回应,他重申 DTO的全部目的是在昂贵的远程 电话。

    因此,理想情况下,对于这些操作,您应该创建一些辅助对象,或者可以将它们添加为控制器。

        3
  •  1
  •   gargkshitiz    6 年前

    由于这是一个RESTful服务,理想情况下,用户添加/创建请求应该发回201个创建的HTTP状态代码,用户ID位于位置标头中,没有响应正文。对于请求,可以将其命名为UserDetails或UserData,也可以简单地命名为User。参考 https://pontus.ullgren.com/view/Return_Location_header_after_resource_creation