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

учитывая этот сценарий, где у вас есть "объекты передачи" (POJO'S с только геттерами/сеттерами), которые передаются клиентской библиотекой в ваш 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 ответов


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


Data Tтрансфер Object классы должны следовать конвенция имя определена в Спецификация Языка Java:

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

ClassLoader
SecurityManager
Thread
Dictionary
BufferedInputStream

[...]


суффикс имени класса с DTO или Dto на самом деле не имеет смысла и не говорит много о самом классе. Рассмотрите возможность использования имен, описывающих цель из ваших классов.

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

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


добавление DTO или DAO или что-либо еще нарушает сухой. FQN в полном порядке, особенно если они действительно одно и то же.


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

или если вы не возражаете против объекта слово в имени класса пойти на что-то вроде карточки (автомобиль объект передачи данных)


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