Соглашение об именовании объектов передачи данных Java?

StackOverflow https://stackoverflow.com/questions/1724774

Вопрос

Учитывая этот сценарий, когда у вас есть "объекты передачи" (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)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top