web-dev-qa-db-fra.com

Java convention de dénomination des objets de transfert de données?

É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?

42
Marcus Leon

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.

31
IaCoder

[~ # ~] 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:

  • SomeSortOf Commande
  • SomeSortOf Configuration
  • SomeSortOf Informations d'identification
  • SomeSortOf Détails
  • SomeSortOf Élément
  • SomeSortOf Événement
  • SomeSortOf En-tête
  • SomeSortOf Entrée
  • SomeSortOf Instruction
  • SomeSortOf Article
  • SomeSortOf Message
  • SomeSortOf Métadonnées
  • SomeSortOf Opération
  • SomeSortOf Sortie
  • SomeSortOf Charge utile
  • SomeSortOf Projection
  • SomeSortOf QueryParameter
  • SomeSortOf QueryResult
  • SomeSortOf Représentation
  • SomeSortOf Demande
  • SomeSortOf Ressource
  • SomeSortOf Réponse
  • SomeSortOf Résultat
  • SomeSortOf Ligne
  • SomeSortOf Paramètres
  • SomeSortOf Spécification
  • SomeSortOf Statut
  • SomeSortOf Résumé

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).

150
cassiomolin

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.

5
Jim Barrows

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)

2
Perpetualcoder