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



Видел несколько подобных вопросов:




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

1158   6  

6 ответов:

JavaBeans

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

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

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

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

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

POJO

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

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

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

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

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

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

Объект Ценности

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

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

Обычно вы можете сказать им, потому что их понятие равенства не основано на идентичности, вместо этого два объекта значения равны, если все их поля равны. Хотя все поля равны, вам не нужно сравнивать все поля, если подмножество уникально - например, Коды валют для объектов валюты достаточно проверить равенство. Общая эвристика состоит в том, что объекты ценности должны быть полностью неизменный. Если вы хотите изменить объект value, вы должны заменить его новым и не иметь права обновлять значения самого объекта value-обновляемые объекты value приводят к проблемам с алиасированием. Ранняя литература J2EE использовала термин value object для описания другого понятия, которое я называю объектом передачи данных. С тех пор они изменили свое употребление и вместо этого используют термин Transfer Object.

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

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

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

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

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

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


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

DTO vs VO

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

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

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

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

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

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

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

POJO vs 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.

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

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

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

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

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

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

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

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

Сначала Поговорим О

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

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

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

Comments

    Ничего не найдено.