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


видел некоторые подобные вопросы:

не могли бы вы также рассказать мне контексты, в которых они используются? Или их цель?

6 451

6 ответов:

JavaBeans

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

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

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

обязательные соглашения:

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

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

POJO

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

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

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

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

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

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

Стоимость Объекта

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

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

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

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

ранняя литература J2EE использовала термин value object для описания другого понятия, которое я называю сведения Передача Объекта. С тех пор они изменили свое использование и используют термин Передача Объекта.

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

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

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

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

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

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


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

DTO vs VO

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

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

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

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

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

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

во - объект Value [1] [2] представляет собой фиксированный набор данных и похож на перечисление Java. Идентичность объекта значения основана на их состоянии, а не на их идентичности объекта и неизменна. Примером реального мира был бы цвет.красный цвет.СИНИЙ, СЕКС.Женщина и т. д.

POJO против JavaBeans с

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

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

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

по сути,

DTO: "объекты передачи данных" могут перемещаться между отдельными слоями в архитектуре программного обеспечения.

VO: "объекты значения" содержат объект,такой как целое число, деньги и т. д.

POJO: обычный старый объект Java, который не является специальным объектом.

Java Beans: требуется Java Class чтобы быть сериализуемым, есть no-arg конструктор и геттер и сеттер для каждого поля

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

The спецификации JavaBeans в Java 1.0 была попытка Sun разрешить манипулировать объектами Java в среде IDE, которая выглядела как VB. Были правила, установленные для объектов, которые квалифицировались как "Java Beans":

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

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

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

POJO-объекты были реакцией против помощи EJB.

POJO : Он представляет собой Java-файл(класс), которая не распространяется или реализовать любой другой Java-файл(класс).

Bean: Это java-файл (класс), в котором все переменные являются частными, методы являются общедоступными и соответствующие геттеры и сеттеры используются для доступа к переменным.

нормальный класс: Это java-файл (класс), который может состоять из открытых/частных/по умолчанию / защищенных переменных и который может или не может расширяться или реализовываться другой java-файл (класс).

О

Нормальный Класс - это означает, что любой класс определяет, что обычно в java это означает, что вы создаете другой тип свойств метода etc.
Bean - Bean-это ничего, это только объект этого конкретного класса с помощью этого компонента вы можете получить доступ к своему классу java так же, как к объекту..

и после этого поговорим о последнем POJO

POJO - POJO это класс, который не имеет никаких служб, он имеет только конструктор по умолчанию и частное свойство, а также свойство для установки значения, соответствующего методам setter и getter. Это короткая форма простого объекта Java.