Java数据传输对象命名约定?

在这种情况下,您有一个客户端库传递给API的“传输对象”(POJO只有getter / setter),命名传输对象的最佳方法是什么?

package com.x.core; public class Car { private String make; private String model; public Car(com.x.clientapi.Car car) { this.make = car.getMake(); this.model = car.getModel(); } } 

在此示例中,您的主类和传输对象都具有名称Car 。 它们有不同的包装,但我认为拥有相同的名称令人困惑。 有关如何命名传输对象的最佳实践吗?

我通常将“DTO”添加到类名的末尾,并将所有DTO放在他们自己的包中。 在您的示例中,我将其称为com.x.core.dto.CarDTO。

D ata T ransfer O bject类应遵循Java语言规范中定义的名称约定 :

类类型的名称应该是描述性名词或名词短语,而不是过长,混合大小写的每个单词的第一个字母。

 ClassLoader SecurityManager Thread Dictionary BufferedInputStream 

[…]


使用DTO或Dto对类名进行后缀并不是很有意义,并且不会对类本身有太多了解。 考虑使用描述类的目的的名称。

以下是您可以使用的名称建议的非详尽列表:

  • SomeSortOf 命令
  • SomeSortOf 配置
  • SomeSortOf 凭证
  • SomeSortOf 详细信息
  • SomeSortOf 元素
  • SomeSortOf 事件
  • SomeSortOf Header
  • SomeSortOf 输入
  • SomeSortOf 指令
  • SomeSortOf 项目
  • SomeSortOf 消息
  • SomeSortOf 元数据
  • SomeSortOf Operation
  • SomeSortOf 输出
  • SomeSortOf Payload
  • SomeSortOf QueryParameter
  • SomeSortOf QueryResult
  • SomeSortOf Representation
  • SomeSortOf 请求
  • SomeSortOf 响应
  • SomeSortOf 结果
  • SomeSortOf Row
  • SomeSortOf 设置
  • SomeSortOf 规范
  • SomeSortOf 状态
  • SomeSortOf 摘要
  • SomeSortOf 查看

注1:首字母缩略词或所有大写单词是否应作为单词处理,我想这取决于你。 检查Java API ,你会发现一些像ZipInputStream / GZIPInputStream这样的绊脚石。 两个类都在同一个包中 ,名称约定不一致。 HttpURLConnection也没有显示与首字母缩略词的任何一致性。

注2:上面列出的一些名字是从Richard Dingwall撰写的这篇文章中借来的(原始文章似乎已不再可用,所以这里是来自Web Archive 的缓存副本 )。

添加DTO或DAO或其他任何东西都会违反DRY。 FQN非常好,特别是如果它们真的是一样的话。

我不认为有一个表现出这种行为的类的最佳实践或惯例。 我个人不喜欢任何类名中的对象一词。 您可以使用像Poko.Car这样的资格或使用一些命名约定,如Car(用于POJO)CarDa(用于数据访问)CarBiz(用于业务域类)

或者,如果你不介意类名中的单词对象,请选择类似CarDto(汽车数据传输对象)的内容

使用适合您正在使用的其他代码约定的约定。 我个人使用后缀“TO”(例如,与Customer域类关联的数据传输对象名为CustomerTO)。 包结构也应该传达每种类的意图(so.foo.domain.Customer和so.foo.transport.CustomerTO)