Соглашение об именовании объектов передачи данных Java?
-
19-09-2019 - |
Вопрос
Учитывая этот сценарий, когда у вас есть "объекты передачи" (POJO с только получателями / установщиками), которые передаются клиентской библиотекой вашему API, каков наилучший способ присвоить объектам передачи имена?
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
.Они находятся в разных пакетах, но я думаю, что одно и то же имя сбивает с толку.Существует ли рекомендуемая практика относительно того, как называть объекты передачи?
Решение
Обычно я добавляю "DTO" в конец имени класса, а также помещаю все DTO в их собственный пакет.В вашем примере я бы назвал это com.x.core.dto.CarDTO.
Другие советы
Dата Tрансфер Oобъект занятия должны проводиться в соответствии с соглашение об именах определенный в Спецификация языка Java:
Названия типов классов должны быть описательными существительными или именными словосочетаниями, не слишком длинными, в смешанном падеже с заглавной первой буквой каждого слова.
ClassLoader SecurityManager Thread Dictionary BufferedInputStream
[...]
Добавление суффикса к имени класса с помощью DTO или Dto на самом деле это не имеет смысла и мало что говорит о самом классе.Рассмотрите возможность использования имен, описывающих цель из ваших классов.
Вот неполный список предложений по названию, которые вы могли бы использовать:
- Что - нибудь вродеКоманда
- Что - нибудь вродеКонфигурация
- Что - нибудь вродеУчетные данные
- Что - нибудь вродеПодробные сведения
- Что - нибудь вродеЭлемент
- Что - нибудь вродеСобытие
- Что - нибудь вродеЗаголовок
- Что - нибудь вродеВходные данные
- Что - нибудь вродеИнструкция
- Что - нибудь вродеПредмет
- Что - нибудь вродеСообщение
- Что - нибудь вродеМетаданные
- Что - нибудь вродеОперация
- Что - нибудь вродеВыходной сигнал
- Что - нибудь вродеПолезная нагрузка
- Что - нибудь вродеПроекция
- Что - нибудь вродеПараметр запроса
- Что - нибудь вродеРезультат запроса
- Что - нибудь вродеПредставительство
- Что - нибудь вродеЗапрос
- Что - нибудь вродеРесурс
- Что - нибудь вродеОтвет
- Что - нибудь вродеРезультат
- Что - нибудь вродеРяд
- Что - нибудь вродеНастройки
- Что - нибудь вродеСпецификация
- Что - нибудь вродеСтатус
- Что - нибудь вродеКраткие сведения
Примечание 1: Следует ли обрабатывать аббревиатуры или все слова с заглавной буквы как слова или нет, я думаю, это зависит от вас.Проверьте Java API и вы обнаружите некоторые спотыкания, такие как ZipInputStream
/ GZIPInputStream
.Оба класса находятся в та же упаковка и соглашение об именах не является согласованным. HttpURLConnection
также не видно никакой согласованности с аббревиатурами.
Примечание 2: Некоторые названия , перечисленные выше, были заимствованы из этого Статья автор : Ричард Дингуолл (оригинальная статья, похоже, больше недоступна, так что вот кэшированная копия из веб-архива).
Добавление DTO, DAO или чего-либо еще нарушает DRY.FQN - это совершенно нормально, особенно если это действительно одно и то же.
Я не думаю, что существует наилучшая практика или соглашение для класса, демонстрирующего такое поведение.Лично мне не нравится слово Object ни в одном из названий классов.Вы могли бы либо использовать некоторую квалификацию, например Poko.Car, либо использовать некоторое соглашение об именовании, например Car (для POJO) CardA (для доступа к данным) CarBiz (для класса бизнес-домена)
Или, если вы не возражаете против слова object в имени класса, выберите что-то вроде CarDto (объект передачи данных автомобиля).
Используйте соглашение, которое подходит среди других соглашений о коде, которые вы используете.Лично я использую суффикс "TO" (например,объект передачи данных, связанный с классом домена Customer, называется CustomerTO).Также структура пакета должна передавать назначение каждого типа класса (so.foo.domain.Customer и so.foo.transport.CustomerTO)