鉴于这种情况,你有一个客户端库传递给你的“传输对象”(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
。它们在不同的包装中,但我认为使用相同的名称令人困惑。有关如何命名传输对象的最佳实践吗?
答案 0 :(得分:136)
Data Transfer Object课程应遵循name convention中定义的Java Language Specification:
类类型的名称应该是描述性名词或名词短语,而不是过长,混合大小写的每个单词的第一个字母。
ClassLoader SecurityManager Thread Dictionary BufferedInputStream
[...]
使用 DTO 或 Dto 对类名进行后缀并不是很有意义,并且不会对类本身有太多了解。请考虑使用描述类的目的的名称。
以下是您可以使用的名称建议的非详尽列表:
注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)