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

时间:2009-11-12 19:30:04

标签: java naming-conventions data-transfer-objects

鉴于这种情况,你有一个客户端库传递给你的“传输对象”(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。它们在不同的包装中,但我认为使用相同的名称令人困惑。有关如何命名传输对象的最佳实践吗?

6 个答案:

答案 0 :(得分:136)

Data Transfer Object课程应遵循name convention中定义的Java Language Specification

  

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

     
ClassLoader
SecurityManager
Thread
Dictionary
BufferedInputStream
     

[...]

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

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

  • SomeSortOf 命令
  • SomeSortOf 配置
  • SomeSortOf 证书
  • SomeSortOf 详情
  • SomeSortOf 元素
  • SomeSortOf 事件
  • SomeSortOf 标题
  • SomeSortOf 输入
  • SomeSortOf <强>指令
  • SomeSortOf 档案
  • SomeSortOf 消息
  • SomeSortOf 元数据
  • SomeSortOf 操作
  • SomeSortOf 输出
  • SomeSortOf 有效载荷
  • SomeSortOf QueryParameter
  • SomeSortOf QueryResult中
  • SomeSortOf 表示
  • SomeSortOf 请求
  • SomeSortOf 响应
  • SomeSortOf 结果
  • SomeSortOf
  • SomeSortOf 设置
  • SomeSortOf 规范
  • SomeSortOf 状态
  • SomeSortOf 摘要
  • SomeSortOf 查看

注1:是否应将首字母缩略词或所有大写单词作为单词处理,我想这取决于你。查看Java API,您会发现ZipInputStream / GZIPInputStream等绊脚石。这两个类都在same package中,名称约定不一致。 HttpURLConnection与首字母缩略词没有任何一致性。

注2:上面列出的某些名称是从article撰写的Richard Dingwall借用的(原始文章似乎已不再可用,因此{{来自Web Archive的。}

答案 1 :(得分:29)

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

答案 2 :(得分:5)

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

答案 3 :(得分:2)

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

或者,如果您不介意类名中的单词对象,请使用CarDto(汽车数据传输对象)

答案 4 :(得分:1)

我看了上面的答案,我只是想补充一点。我以某种方式讨厌 DTO 这个词,它似乎在对我尖叫。所以我尝试使用 Payload 后缀。例如,CarPayload

答案 5 :(得分:-2)

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