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)