Разница между DTO, VO, POJO, JavaBeans?
-
06-07-2019 - |
Вопрос
Видели несколько подобных вопросов:
- В чем разница между JavaBean и POJO?
- В чем разница между POJO (обычный старый Java-объект) и DTO (объект передачи данных)?
Не могли бы вы также, пожалуйста, рассказать мне, в каких контекстах они используются?Или в чем их предназначение?
Решение
JavaBeans
JavaBean — это класс, следующий за соглашения JavaBeans по определению Солнца.В Википедии есть довольно хорошее описание того, что JavaBeans являются:
JavaBeans — это повторно используемые программные компоненты для Java, которыми можно визуально манипулировать в инструменте компоновщика.Фактически это классы, написанные на языке программирования Java, соответствующие определенному соглашению.Они используются для инкапсуляции множества объектов в один объект (компонент), чтобы их можно было передавать как один объект компонента, а не как несколько отдельных объектов.JavaBean — это объект Java, который можно сериализовать, имеет нулевой конструктор и обеспечивает доступ к свойствам с использованием методов получения и установки.
Чтобы функционировать как класс JavaBean, класс объекта должен подчиняться определенным соглашениям об именовании, построении и поведении методов.Эти соглашения позволяют иметь инструменты, которые могут использовать, повторно использовать, заменять и подключать JavaBeans.
Необходимые соглашения:
- Класс должен иметь общедоступный конструктор по умолчанию.Это позволяет легко создавать экземпляры в рамках редактирования и активации.
- Свойства класса должны быть доступны с помощью методов get, set и других (так называемых методов доступа и методов-мутаторов) в соответствии со стандартным соглашением об именах.Это позволяет легко автоматизировать проверку и обновление состояния компонента в средах, многие из которых включают в себя специальные редакторы для различных типов свойств.
- Класс должен быть сериализуемым.Это позволяет приложениям и платформам надежно сохранять, хранить и восстанавливать состояние компонента независимо от виртуальной машины и платформы.
Поскольку эти требования в основном выражены в виде соглашений, а не реализации интерфейсов, некоторые разработчики рассматривают JavaBeans как обычные старые объекты Java, соответствующие определенным соглашениям об именах.
ПОДЖО
Plain Old Java Object или POJO — это термин, первоначально введенный для обозначения простого легковесного объекта Java, не реализующего никаких javax.ejb
интерфейс, в отличие от тяжеловесного EJB 2.x (особенно Entity Beans, Stateless Session Beans не так уж и плохи, по моему мнению).Сегодня этот термин используется для обозначения любого простого объекта без каких-либо дополнительных элементов.Опять же, Википедия хорошо справляется с определением ПОДЖО:
Pojo - аббревиатура для простого старого объекта Java.Имя используется для подчеркивания, что рассматриваемый объект представляет собой обычный объект Java, а не специальный объект, и, в частности, не предприятие Javabean (особенно до EJB 3).Этот термин был придуман Мартином Фаулером, Ребеккой Парсонсом и Джошем Маккензи в сентябре 2000 года:
«Мы задавались вопросом, почему люди так против использования регулярных объектов в своих системах, и пришли к выводу, что это потому, что простым объектам не хватало причудливого имени.Итак, мы дали им один, и это очень хорошо завоевало ».
Термин продолжает схему более старых терминов для технологий, которые не используют новые причудливые функции, такие как горшки (простая старая телефонная служба) в телефонии и стручки (простые старые структуры данных), которые определены в C ++, но используют только языковые функции C, и POD (простая старая документация) в перл.
Термин, скорее всего, получил широкое распространение из -за необходимости общего и легко понятного термина, который контрастирует со сложными объектными рамками.Javabean-это POJO, который является сериализуемым, имеет конструктор без аргумента и позволяет доступ к свойствам, используя методы Getter и Setter.Enterprise Javabean - это не единственный класс, а целая модель компонента (опять же, EJB 3 уменьшает сложность предприятия Javabeans).
Поскольку дизайны, использующие POJOS, становятся более часто используемыми, возникли системы, которые дают POJOS часть функциональности, используемых в рамках и большего выбора о том, какие области функциональности на самом деле необходимы.Hibernate и Spring являются примерами.
Объект значения
Объект значения или VO — это такой объект, как java.lang.Integer
которые содержат значения (следовательно, объекты значений).Для более формального определения я часто ссылаюсь на описание Мартина Фаулера. Объект значения:
В разделе «Шаблоны архитектуры корпоративных приложений» я описал объект-значение как небольшой объект, например объект «Деньги» или «Диапазон дат».Их ключевым свойством является то, что они следуют семантике значений, а не семантике ссылок.
Обычно вы можете сказать им об этом, потому что их понятие равенства основано не на идентичности, а на том, что два объекта значений равны, если все их поля равны.Хотя все поля равны, вам не нужно сравнивать все поля, если подмножество уникально — например, кодов валют для объектов валюты достаточно для проверки равенства.
Общая эвристика заключается в том, что объекты значений должны быть полностью неизменяемыми.Если вы хотите изменить объект значения, вам следует заменить этот объект новым и не иметь права обновлять значения самого объекта значения — обновляемые объекты значений приводят к проблемам с псевдонимами.
В ранней литературе по J2EE термин «объект значения» использовался для описания другого понятия, которое я называю «объектом значения». Объект передачи данных.С тех пор они изменили свое использование и используют термин Перенос объекта вместо.
Вы можете найти еще несколько хороших материалов по объектам-значениям на сайте вики и по Дирк Риле.
Объект передачи данных
Объект передачи данных или DTO — это (анти) шаблон, представленный в EJB.Вместо выполнения множества удаленных вызовов EJB идея заключалась в том, чтобы инкапсулировать данные в объект значения, который можно было бы передавать по сети:Объект передачи данных.В Википедии есть достойное определение Объект передачи данных:
Объект передачи данных (DTO), ранее известный как объекты значений или VO, представляет собой шаблон проектирования, используемый для передачи данных между подсистемами программного приложения.DTO часто используются вместе с объектами доступа к данным для извлечения данных из базы данных.
Разница между объектами передачи данных и бизнес-объектами или объектами доступа к данным заключается в том, что DTO не имеет никакого поведения, кроме хранения и извлечения собственных данных (аксессоров и мутаторов).
В традиционной архитектуре EJB DTO служат двум целям:во-первых, они решают проблему невозможности сериализации объектных компонентов;во-вторых, они неявно определяют этап сборки, на котором все данные, которые будут использоваться представлением, извлекаются и группируются в DTO перед возвратом управления на уровень представления.
Итак, для многих людей DTO и VO — это одно и то же (но, как мы видели, Фаулер использует VO для обозначения чего-то другого).Большую часть времени они следуют соглашениям JavaBeans и, таким образом, также являются JavaBeans.И все они POJO.
Другие советы
DTO против VO
DTO - Объекты передачи данных - это просто контейнеры данных, которые используются для транспортировки данных между слоями и ярусами.
- В основном он содержит атрибуты.Вы даже можете использовать общедоступные атрибуты без геттеров и установщиков.
- Объекты передачи данных не содержат никакой бизнес-логики.
Аналогия:
Простая регистрационная форма с атрибутами имя пользователя, пароль и идентификатор электронной почты.
- Когда эта форма будет отправлена в файле RegistrationServlet, вы получите все атрибуты из уровня представления на бизнес-уровень, куда вы передадите атрибуты java beans, а затем DAO или уровню сохраняемости.
- DTO помогает переносить атрибуты с уровня представления на бизнес-уровень и, наконец, на уровень сохранения.
DTO в основном использовался для эффективной передачи данных по сети, возможно, даже из JVM в другую JVM.
DTO часто являются java.io.Serializable
- для того, чтобы передавать данные через JVM.
ВО - Объект Value [1][2] представляет собой фиксированный набор данных и похож на Java enum.Идентификатор объекта значения основан на его состоянии, а не на идентификаторе объекта, и является неизменяемым.Примером из реального мира может быть Color.КРАСНЫЙ, Color.СИНИЙ, SEX.ЖЕНСКИЙ и т.д.
POJO против JavaBeans
[1] Java-удобство POJO заключается в том, что доступ ко всем его закрытым атрибутам осуществляется через общедоступные методы получения и установки, которые соответствуют соглашениям JavaBeans.например ,
private String foo;
public String getFoo(){...}
public void setFoo(String foo){...};
[2] JavaBeans должен реализовывать Serializable и иметь конструктор без аргументов, тогда как в POJO этих ограничений нет.
По сути,
ДТО:«Объекты передачи данных» могут перемещаться между отдельными уровнями архитектуры программного обеспечения.
ВО:«Объекты значений» содержат такие объекты, как Integer, Money и т. д.
ПОДЖО:Обычный старый объект Java, который не является специальным объектом.
Java-бины:требует Java Class
чтобы быть сериализуемым, иметь no-arg
конструктор, а также метод получения и установки для каждого поля
Java Beans — это не то же самое, что EJB.
А Спецификация JavaBeans в Java 1.0 была попыткой Sun позволить манипулировать объектами Java в среде IDE, которая выглядела как VB.Для объектов, которые квалифицировались как «Java Beans», были установлены правила:
- Конструктор по умолчанию
- Геттеры и установщики для частных элементов данных, которые соответствуют правильному соглашению об именах.
- Сериализуемый
- Может быть, и другие, о которых я забыл.
EJB появились позже.Они сочетают в себе распределенные компоненты и транзакционную модель, работающую в контейнере, который управляет потоками, пулом, жизненным циклом и предоставляет услуги.Они далеки от Java Beans.
DTO появились в контексте Java, потому что люди обнаружили, что спецификация EJB 1.0 слишком «болтлива» по отношению к базе данных.Вместо того, чтобы перебирать каждый элемент данных туда и обратно, люди массово упаковывали их в Java Beans и отправляли друг другу.
POJO были реакцией на EJB.
ПОДЖО :Это Java-файл (класс), который не расширяет и не реализует какой-либо другой Java-файл (класс).
Фасоль:Это Java-файл (класс), в котором все переменные являются частными, методы являются общедоступными, а для доступа к переменным используются соответствующие методы получения и установки.
Обычный класс:Это Java-файл (класс), который может состоять из общедоступных/частных/по умолчанию/защищенных переменных и который может или не может расширять или реализовывать другой Java-файл (класс).
Первый разговор о
Обычный класс - это означает, что любое определение класса обычно используется в Java, это означает, что вы создаете свойства метода другого типа и т. д.
Боб - Bean - это ничто, это всего лишь объект этого конкретного класса. Используя этот bean, вы можете получить доступ к своему Java-классу так же, как к объекту..
и после этого поговорим о последнем POJO
ПОДЖО - ПОДЖО это тот класс, у которого нет никаких сервисов, у него есть только конструктор по умолчанию и частное свойство, а также эти свойства для установки значений, соответствующих методам установки и получения.Это короткая форма простого Java-объекта.
- Объект значения :Используйте, когда необходимо измерить равенство объектов на основе значения объектов.
- Объект передачи данных :Передавайте данные с несколькими атрибутами за один раз от клиента к серверу на разных уровнях, чтобы избежать повторных вызовов на удаленный сервер.
- Обычный старый Java-объект :Это как простой класс со свойствами, публичный конструктор без аргументов.Как мы заявляем для объекта JPA.
разница между шаблоном-объекта-значения и шаблоном-передачи-данных