Соглашение об именовании объектов передачи данных Java? - PullRequest
38 голосов
/ 12 ноября 2009

Учитывая этот сценарий, в котором у вас есть «объекты переноса» (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. Они находятся в разных пакетах, но я думаю, что одно и то же имя сбивает с толку. Есть ли лучшая практика, как называть объекты переноса?

Ответы [ 5 ]

140 голосов
/ 11 февраля 2016

D ata T перевод O bject классы должны следовать соглашению name , определенному в Спецификация языка Java :

Имена типов классов должны быть описательными существительными или именными фразами, не слишком длинными, в смешанном регистре, причем первая буква каждого слова пишется с большой буквы.

ClassLoader
SecurityManager
Thread
Dictionary
BufferedInputStream

[...]


Суффикс имени класса с DTO или Dto на самом деле не имеет смысла и мало что говорит о самом классе. Попробуйте использовать имена, которые описывают цель ваших классов.

Вот неполный список предложений имен, которые вы можете использовать:

  • SomeSortOf Команда
  • SomeSortOf Конфигурация
  • SomeSortOf Полномочия
  • SomeSortOf Детали
  • SomeSortOf Элемент
  • SomeSortOf Событие
  • SomeSortOf Заголовок
  • SomeSortOf Input
  • SomeSortOf Инструкция
  • SomeSortOf Item
  • SomeSortOf Сообщение
  • SomeSortOf Metadata
  • SomeSortOf Операция
  • SomeSortOf выход
  • SomeSortOf Payload
  • SomeSortOf QueryParameter
  • SomeSortOf QueryResult
  • SomeSortOf Представление
  • SomeSortOf Запрос
  • SomeSortOf Ответ
  • SomeSortOf Результат
  • SomeSortOf Строка
  • SomeSortOf Настройка
  • SomeSortOf Спецификация
  • SomeSortOf Состояние
  • SomeSortOf Резюме
  • SomeSortOf View

Примечание 1: Должны ли аббревиатуры или все заглавные слова обрабатываться как слова или нет, я думаю, это зависит от вас. Проверьте Java API , и вы найдете некоторые ошибки, такие как ZipInputStream / GZIPInputStream. Оба класса находятся в одном пакете , и соглашение об именах не согласовано. HttpURLConnection также не соответствует аббревиатурам.

Примечание 2: Некоторые из перечисленных выше имен были заимствованы из этой статьи , написанной Ричардом Дингволом (оригинальная статья, по-видимому, более недоступна , вот кэшированная копия из веб-архива).

29 голосов
/ 12 ноября 2009

Я обычно добавляю 'DTO' в конец имени класса, а также помещаю все DTO в их собственный пакет. В вашем примере я бы назвал это com.x.core.dto.CarDTO.

5 голосов
/ 12 ноября 2009

Добавление DTO или DAO или чего-либо еще нарушает DRY. FQN отлично, особенно если они действительно одно и то же.

2 голосов
/ 12 ноября 2009

Я не думаю, что существует лучшая практика или соглашение для класса, демонстрирующего такое поведение. Мне лично не нравится слово Object ни в одном из названий классов. Вы можете использовать некоторую квалификацию, такую ​​как Poko.Car, или использовать соглашение об именах, например Автомобиль (для POJO) CarDa (для доступа к данным) CarBiz (для бизнес-класса)

Или, если вы не возражаете против слова объекта в имени класса, выберите что-то вроде CarDto (Car Data Transfer Object)

0 голосов
/ 12 ноября 2009

Используйте соглашение, которое подходит среди других соглашений кода, которые вы используете. Я лично использую суффикс «TO» (например, объект передачи данных, связанный с классом домена Customer, называется CustomerTO). Также структура пакета должна передавать намерение каждого типа класса (so.foo.domain.Customer и so.foo.transport.CustomerTO)

...