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

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

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

6 ответов


JavaBeans

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

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

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

необходимые соглашения:

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

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

POJO-класс

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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


DTO vs VO

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

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

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

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

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

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

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

POJO-объект vs JavaBeans

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

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

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


по сути,

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

VO: "объекты Value" содержат объект,такой как Integer, Money и т. д.

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

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


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

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

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

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

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

POJOs были реакцией против EJBs.


POJO-класс : Это файл java (класс), который не расширяет или не реализует любой другой файл java(класс).

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

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


О

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

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

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