¿La convención de nomenclatura de objetos de transferencia de datos Java?
naming-conventions data-transfer-objects (5)
Agregar DTO o DAO o cualquier otra cosa viola DRY. El FQN está perfectamente bien, especialmente si son realmente lo mismo.
Dado este escenario en el que tiene "objetos de transferencia" (POJO''s solo con captadores / configuradores) que una biblioteca cliente transfiere a su API, ¿cuál es la mejor manera de nombrar los objetos de transferencia?
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();
}
}
En este ejemplo, su clase principal y su objeto de transferencia tienen el nombre Car
. Están en paquetes diferentes, pero creo que es confuso tener el mismo nombre. ¿Existe alguna práctica recomendada sobre cómo nombrar los objetos transferidos?
Generalmente agrego ''DTO'' al final del nombre de la Clase, así como también coloco todos los DTO en su propio paquete. En su ejemplo lo llamaría com.x.core.dto.CarDTO.
No creo que exista una mejor práctica o convención para una clase que muestre este tipo de comportamiento. Personalmente no me gusta la palabra Objeto en ninguno de los nombres de clase. Puede usar alguna calificación como Poko.Car o alguna convención de nomenclatura como Car (para POJO) CarDa (para acceso a datos) CarBiz (para clase de dominio empresarial)
O si no te importa la palabra objeto en un nombre de clase, ve por algo como CarDto (Car Data Transfer Object)
Utilice una convención que sea adecuada entre las demás convenciones de código que está utilizando. Personalmente uso el sufijo "TO" (por ejemplo, el objeto de transferencia de datos asociado a la clase de dominio del Cliente se llama CustomerTO). Asimismo, la estructura del paquete debe transmitir la intención de cada tipo de clase (so.foo.domain.Customer and so.foo.transport.CustomerTO)
Las clases de objetos D ta T ransfer O deben seguir la convención de nombres definida en la especificación del lenguaje Java :
Los nombres de los tipos de clase deben ser nombres descriptivos o frases nominales, no demasiado largas, en mayúsculas y minúsculas con la primera letra de cada palabra en mayúscula.
ClassLoader SecurityManager Thread Dictionary BufferedInputStream
[...]
El sufijo de un nombre de clase con DTO o Dto no es realmente significativo y no dice mucho sobre la clase en sí. Considera usar nombres que describan el propósito de tus clases.
Aquí hay una lista no exhaustiva de sugerencias de nombres que podría usar:
- Algunos comandos de orden
- Configuración de algún Surtido
- Algunas credenciales de surtido
- Algunos detalles del surtido
- Elemento SomeSortOf
- Algún evento de surtido
- Alguna cabecera
- Entrada de algún Surtido
- Algunas instrucciones de orden
- Algunos artículos de surtido
- Mensaje de algún tipo
- Algunos Metadatos de Surtido
- Operación de algunos proveedores
- Salida de algún Surtido
- Alguna carga útil
- SomeSortOf QueryParameter
- SomeSortOf QueryResult
- Representación de algunos proveedores
- Algunas solicitudes de pedido
- Alguna respuesta breve
- Algunos resultados del Surtido
- SomeSortOf Row
- Algunas configuraciones de surtido
- Especificaciones de SomeSortOf
- Estado de algunos proveedores
- SomeSortOf Resumen
- Algunas vistas cortas
Nota 1: Ya sea que las siglas o todas las palabras en mayúscula se traten como palabras o no, supongo que depende de usted. Compruebe la API de Java y encontrará algunos tropiezos como ZipInputStream
/ GZIPInputStream
. Ambas clases están en el mismo paquete y la convención de nombres no es consistente. HttpURLConnection
tampoco muestra ninguna coherencia con los acrónimos.
Nota 2: Algunos nombres mencionados anteriormente fueron tomados en préstamo de este article escrito por Richard Dingwall (el artículo original parece que ya no está disponible, por lo que aquí hay una copia en caché del archivo web).