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

Mar*_*eon 47 java naming-conventions data-transfer-objects

在这种情况下,您有一个客户端库传递给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();
        }
}
Run Code Online (Sandbox Code Playgroud)

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

cas*_*lin 160

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

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

ClassLoader
SecurityManager
Thread
Dictionary
BufferedInputStream
Run Code Online (Sandbox Code Playgroud)

[...]


后面添加一个类名DTODTO是不是真的有意义的,并没有告诉太多关于类本身.考虑使用描述类的目的的名称.

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

  • SomeSortOf 命令
  • SomeSortOf 配置
  • SomeSortOf 凭证
  • SomeSortOf 详细信息
  • SomeSortOf 元素
  • SomeSortOf 事件
  • SomeSortOf Header
  • SomeSortOf 输入
  • SomeSortOf 指令
  • SomeSortOf 项目
  • SomeSortOf 消息
  • SomeSortOf 元数据
  • SomeSortOf 操作
  • 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 的缓存副本).

  • “没有真正的意义,也没有对类本身进行太多介绍”,它准确地描述了类的目的是数据传输。Car类是现实世界中的实体,应包含行为和业务约束。CarDto类是包含要传输的数据的类。特别是当DTO这个术语广为人知时,看到CarDto的人将确切地知道它是什么,而不是看到两个Car类。 (5认同)
  • 不是很相信。例如,异常类通常带有“Exception”后缀。你也认为这是不好的做法。您能否说明在什么情况下可以使用静态后缀。谢谢! (3认同)
  • @OleksandrPapchenko 我不确定这是否是一个公平的比较。`DTO` 后缀是广泛的、抽象的,并没有说明关于类本身的太多信息。如果您打算使用 DTO 模式,请选择一个名称来描述类 _ 的含义_。例如,`QueryParameter` 和`QueryResult` 后缀比`DTO` 后缀更清楚地定义表示查询参数或查询结果的类。 (3认同)

IaC*_*der 34

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

  • 我会避免在DTO中使用大写字母 - 如果在类名中使用缩写,则会使其可读性降低.这就是我更喜欢"CarDto"的原因. (19认同)
  • 它不是特别漂亮,但它确实意味着您可以导入 dto 和“main”类。没有后缀会使所有额外的包名称的复制代码变得非常难看。 (3认同)
  • 当我有多个相同类别的DTO时,情况怎么样? (3认同)
  • 当你写“Dto”时,你仍然在写一个缩写。那么,使用小写字母表示“t”和“o”有什么区别呢?是因为当你使用小写时,“Dto”后面的单词更容易识别吗? (2认同)

Jim*_*ows 5

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

  • 添加任何内容都会使得在原始实体,DTO对象,缓存对象,NoSQL对象,所有命名相同,只是在不同的包中时,在IDE中找到正确的对象要困难得多. (13认同)
  • 清晰度也是一个重要的考虑因素.干很重要但不是不可侵犯的.当其他考虑因素变得同等或更重要时,我们遵循的大多数原则都会受到侵犯.对DRY迂腐可能会导致代码中出现难闻的气味. (11认同)
  • FQN 表示完全限定名称,以防万一有人想知道 (6认同)
  • 我不同意..除了我发现代码混淆以相同的名称阅读。您可以指定使用客户端API的FQN,但这也有些麻烦。 (2认同)
  • FQN是并且不应该在代码中使用.啧. (2认同)