Разница между DTO, VO, POJO, JavaBeans?

Майеб Этот? Функция UrlEncode

523
задан Community 23 May 2017 в 11:47
поделиться

3 ответа

JavaBeans

JavaBean - это класс, который следует соглашениям JavaBeans , определенным Sun. В Википедии есть довольно хорошее резюме того, что такое JavaBeans :

JavaBeans - это многократно используемые программные компоненты для Java, которыми можно визуально управлять с помощью инструмента построения. Фактически, это классы, написанные на языке программирования Java в соответствии с определенным соглашением. Они используются для инкапсуляции многих объектов в один объект (компонент), чтобы их можно было передавать как один объект компонента, а не как несколько отдельных объектов. JavaBean - это сериализуемый объект Java, имеющий конструктор с нулевым значением и разрешающий доступ к свойствам с помощью методов получения и установки.

Чтобы функционировать как класс JavaBean, объектный класс должен подчиняться определенным соглашениям об именах, построении и поведении методов. Эти соглашения позволяют иметь инструменты, которые могут использовать, повторно использовать, заменять и подключать JavaBeans.

Требуемые соглашения:

  • Класс должен иметь общедоступный конструктор по умолчанию. Это позволяет легко создавать экземпляры в рамках среды редактирования и активации.
  • Свойства класса должны быть доступны с использованием методов get, set и других (так называемых методов доступа и методов мутатора) в соответствии со стандартным соглашением об именах. Это позволяет легко автоматизировать проверку и обновление состояния bean-компонентов в рамках фреймворков, многие из которых включают специальные редакторы для различных типов свойств.
  • Класс должен быть сериализуемым. Это позволяет приложениям и фреймворкам надежно сохранять, хранить и восстанавливать bean-компонент. s состояние способом, который не зависит от виртуальной машины и платформы.

Поскольку эти требования в основном выражаются в виде соглашений, а не реализации интерфейсов, некоторые разработчики рассматривают JavaBeans как обычные старые объекты Java, которые следуют определенным соглашениям об именах.

POJO

Обычный старый объект Java или POJO - это термин, первоначально введенный для обозначения простого облегченного объекта Java, не реализующего какой-либо интерфейс javax.ejb , в отличие от тяжелого EJB 2.x (особенно Entity Beans, Сессионные бобы без сохранения состояния - это не так уж и плохо, ИМО). Сегодня этот термин используется для обозначения любого простого объекта без лишних деталей. Опять же, Википедия хорошо справляется с определением POJO :

POJO - это аббревиатура от Plain Old Java

Поскольку эти требования в значительной степени выражаются в виде соглашений, а не реализации интерфейсов, некоторые разработчики рассматривают JavaBeans как обычные старые объекты Java, которые следуют определенным соглашениям об именах.

POJO

Простой старый объект Java или POJO изначально является термином введен для обозначения простого легкого Java-объекта, не реализующего никакого интерфейса javax.ejb , в отличие от тяжелого EJB 2.x (особенно Entity Beans, Stateless Session Beans не так уж и плох IMO). Сегодня этот термин используется для обозначения любого простого объекта без лишних деталей. Опять же, Википедия хорошо справляется с определением POJO :

POJO - это аббревиатура от Plain Old Java

Поскольку эти требования в основном выражаются в виде соглашений, а не реализации интерфейсов, некоторые разработчики рассматривают JavaBeans как обычные старые объекты Java, которые следуют определенным соглашениям об именах.

POJO

Простой старый объект Java или POJO изначально является термином введен для обозначения простого легкого Java-объекта, не реализующего никакого интерфейса javax.ejb , в отличие от тяжелого EJB 2.x (особенно Entity Beans, Stateless Session Beans не так уж и плох IMO). Сегодня этот термин используется для обозначения любого простого объекта без лишних деталей. Опять же, Википедия хорошо справляется с определением POJO :

POJO - это аббревиатура от Plain Old Java

POJO

Обычный старый объект Java или POJO - это термин, первоначально введенный для обозначения простого облегченного объекта Java, не реализующего какой-либо интерфейс javax.ejb , в отличие от тяжелого EJB 2.x ( особенно Entity Beans, Session Beans без сохранения состояния - это не так уж и плохо, IMO). Сегодня этот термин используется для обозначения любого простого объекта без лишних деталей. Опять же, Википедия хорошо справляется с определением POJO :

POJO - это аббревиатура от Plain Old Java

POJO

Обычный старый объект Java или POJO - это термин, первоначально введенный для обозначения простого облегченного объекта Java, не реализующего какой-либо интерфейс javax.ejb , в отличие от тяжелого EJB 2.x ( особенно Entity Beans, Session Beans без сохранения состояния - это не так уж плохо, IMO). Сегодня этот термин используется для обозначения любого простого объекта без лишних деталей. Опять же, Википедия хорошо справляется с определением POJO :

POJO - это аббревиатура от Plain Old Java Объект. Имя используется, чтобы подчеркнуть что рассматриваемый объект является обычный Java-объект, а не специальный объект, и в частности не Enterprise JavaBean (особенно до EJB 3). Термин был введен Мартином Фаулер, Ребекка Парсонс и Джош Маккензи в сентябре 2000 г .:

«Мы задавались вопросом, почему люди так против использования обычных предметов в своих систем и пришел к выводу, что это потому что простым предметам не хватало фантазии имя. Мы дали им одну, и она очень хорошо прижился ».

Этот термин продолжает модель старые термины для технологий, которые не использовать необычные новые функции, такие как POTS (обычная старая телефонная связь) в телефония и PODS (обычные старые данные Структуры), которые определены в C ++ но использовать только функции языка C и POD (Обычная старая документация) на Perl.

Этот термин, скорее всего, получил широкое признание из-за потребность в общем и легком понятый термин, который контрастирует с сложные объектные рамки. А JavaBean - это POJO, сериализуемый, не имеет аргументов конструктор и позволяет получить доступ к свойства, использующие геттер и сеттер методы. Enterprise JavaBean не один класс, но целый компонент модель (опять же, EJB 3 уменьшает сложность Enterprise JavaBeans).

Поскольку проекты с использованием POJO стали более часто используемые системы имеют возникли, которые дают POJO некоторые из функциональность, используемая во фреймворках и больше выбора о том, какие области функциональность действительно необходима. Примеры Hibernate и Spring.

Объект значения

Объект значения или VO - это такой объект, как java.lang.Integer , который хранит значения (следовательно, объекты значений). Для получения более формального определения я часто обращаюсь к описанию Мартином Фаулером объекта значения :

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

Обычно вы можете сказать им, потому что их понятие равенства не основано на идентичности, вместо этого два объекта значений равны, если все их поля равны. Хотя все поля равны, вам не нужно сравнивать все поля, если подмножество уникально - например, кодов валют для объектов валюты достаточно, чтобы проверить равенство.

Общая эвристика состоит в том, что объекты значений должны быть полностью неизменяемыми. Если вы хотите изменить объект-значение, вы должны заменить этот объект новым и не иметь права обновлять значения самого объекта-значения - обновляемые объекты-значения приводят к проблемам с псевдонимом.

В ранней литературе J2EE использовался термин объект-значение чтобы описать другое понятие, то, что я называю объектом передачи данных . С тех пор они изменили свое использование и вместо этого используют термин Transfer Object .

Вы можете найти еще несколько хороших материалов по ценным объектам в wiki и от Dirk Riehle .

Объект передачи данных

Объект передачи данных или DTO - это (анти) шаблон, представленный в EJB. Вместо выполнения множества удаленных вызовов EJB-компонентов, идея заключалась в том, чтобы инкапсулировать данные в объект-значение, который можно было бы передавать по сети: объект передачи данных. В Википедии есть достойное определение объекта передачи данных :

Объект передачи данных (DTO), ранее известный как объекты значений или VO, представляет собой шаблон проектирования, используемый для передачи данных между подсистемами программного приложения. DTO часто используются вместе с объектами доступа к данным для извлечения данных из базы данных.

Разница между объектами передачи данных и бизнес-объектами или объектами доступа к данным заключается в том, что DTO не имеет никакого поведения, кроме как для хранения и извлечения собственных данных. данные (аксессоры и мутаторы).

В традиционной архитектуре EJB DTO служат двойным целям: во-первых, они работают над проблемой невозможности сериализации объектных компонентов; во-вторых, они неявно определяют фазу сборки, на которой все данные, которые будут использоваться представлением, выбираются и упорядочиваются в DTO перед возвратом управления на уровень представления.


Таким образом, для многих людей DTO и VO - это одно и то же (но Фаулер использует VOs означает что-то еще, как мы видели). В большинстве случаев они следуют соглашениям JavaBeans и, следовательно, тоже являются JavaBeans. И все они POJO.

819
ответ дан 22 November 2019 в 22:20
поделиться

DTO против VO

DTO - Объекты передачи данных - это просто контейнеры данных, которые используются для передачи данных между уровнями и уровнями.

  • Он в основном содержит атрибуты. Вы даже можете использовать общедоступные атрибуты без геттеров и сеттеров.
  • Объекты передачи данных не содержат никакой бизнес-логики.

Аналогия:
Простая форма регистрации с атрибутами username, пароль и адрес электронной почты.

  • Когда эта форма отправляется в файл RegistrationServlet, вы получите все атрибуты от уровня представления до бизнес-уровня, на котором вы передадите атрибуты к java beans, а затем к DAO или слою постоянства.
  • DTO помогает в транспортировке атрибутов от уровня представления к бизнес-уровню и, наконец, к уровню сохраняемости.

DTO в основном использовался для эффективной передачи данных по сети, он может быть даже от JVM к другой JVM.

] DTO часто java.io.Serializable - для передачи данных через JVM.

VO - Объект значения [1] [2] представляет собой фиксированный набор данных и является похоже на перечисление Java. Идентичность объекта-значения основана на их состоянии, а не на их идентичности объекта, и является неизменной. Примером из реальной жизни может быть Color.RED, Color.BLUE, SEX.FEMALE и т. Д.

POJO против JavaBeans

[1] Java-Beanness POJO заключается в том, что все его частные атрибуты доступны через общедоступные геттеры и сеттеры, которые соответствуют соглашениям JavaBeans. например,

    private String foo;
    public String getFoo(){...}
    public void setFoo(String foo){...}; 

[2] JavaBeans должен реализовывать Serializable и иметь конструктор без аргументов, тогда как в POJO эти ограничения отсутствуют.

61
ответ дан 22 November 2019 в 22:20
поделиться

Java Beans - это не то же самое, что EJB.

Спецификация JavaBeans в Java 1.0 была попыткой Sun разрешить манипулирование объектами Java в среде IDE, которая выглядела как VB. Для объектов, квалифицируемых как «Java Beans», были установлены правила:

  1. Конструктор по умолчанию
  2. Получатели и сеттеры для членов закрытых данных, которые следовали надлежащему соглашению об именах
  3. Serializable
  4. Возможно, другие, о которых я забыл .

EJB появились позже. Они сочетают в себе распределенные компоненты и транзакционную модель, работающую в контейнере, который управляет потоками, пулами, жизненным циклом и предоставляет услуги. Они далеки от Java Beans.

DTO возникли в контексте Java, потому что люди обнаружили, что спецификация EJB 1.0 была слишком "болтливой" с базой данных.

24
ответ дан 22 November 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: