Étant donné ce scénario où vous avez des "objets de transfert" (POJO avec seulement des getters/setters) qui sont passés par une bibliothèque cliente à votre API, quelle est la meilleure façon de nommer les objets de transfert?
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();
}
}
Dans cet exemple, votre classe principale et votre objet de transfert ont tous deux le nom Car
. Ils sont dans des packages différents mais je pense que c'est déroutant d'avoir le même nom. Existe-t-il une meilleure pratique pour nommer les objets de transfert?
J'ajoute généralement "DTO" à la fin du nom de la classe et je place tous les DTO dans leur propre package. Dans votre exemple, je l'appellerais com.x.core.dto.CarDTO.
[~ # ~] d [~ # ~] ata [~ # ~] t [ ~ # ~] ransfer [~ # ~] o [~ # ~] bject les classes devraient suivre la convention de nom définie dans la Java Language Specification :
Les noms des types de classe doivent être des noms descriptifs ou des phrases nominales, pas trop longs, en cas de mélange avec la première lettre de chaque mot en majuscule.
ClassLoader SecurityManager Thread Dictionary BufferedInputStream
[...]
Suffixe d'un nom de classe avec [~ # ~] dto [~ # ~] ou Dto n'a pas vraiment de sens et ne dit pas grand-chose sur la classe elle-même. Pensez à utiliser des noms qui décrivent le but de vos classes.
Voici une liste non exhaustive de suggestions de noms que vous pourriez utiliser:
Remarque 1: Que les acronymes ou tous les mots en majuscule soient traités comme des mots ou non, je suppose que cela dépend de vous. Vérifiez le API Java et vous trouverez des trébuchements comme ZipInputStream
/ GZIPInputStream
. Les deux classes sont dans le même package et la convention de nom n'est pas cohérente. HttpURLConnection
ne montre pas non plus de cohérence avec les acronymes.
Note 2: Certains noms énumérés ci-dessus ont été empruntés à cela article écrit par Richard Dingwall (le l'article d'origine ne semble plus être disponible, donc voici une copie en cache à partir des archives Web).
L'ajout de DTO ou DAO ou toute autre chose viole DRY. Le FQN est parfaitement bien, surtout si c'est vraiment la même chose.
Je ne pense pas qu'il existe une meilleure pratique ou convention pour une classe présentant ce type de comportement. Personnellement, je n'aime pas l'objet Word dans aucun des noms de classe. Vous pouvez utiliser une qualification comme Poko.Car ou utiliser une convention de dénomination comme Car (pour POJO) CarDa (pour l'accès aux données) CarBiz (pour la classe de domaine commercial)
Ou si cela ne vous dérange pas l'objet Word dans un nom de classe optez pour quelque chose comme CarDto (Car Data Transfer Object)