Подтвердить что ты не робот

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

Увидели некоторые похожие вопросы:

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

4b9b3361

Ответ 1

JavaBeans

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

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

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

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

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

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

POJO

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

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

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

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

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

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

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

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

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

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

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

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

Вы можете найти еще один хороший материал по объектам значений на wiki и Дирк Риле.

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

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

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

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

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


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

Ответ 2

DTO против VO

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

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

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

  • Когда эта форма отправляется в файл RegistrationServlet, вы получаете все атрибуты от уровня представления до бизнес-уровня, где вы передаете атрибуты Java-бинам, а затем в 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 таких ограничений нет.

Ответ 3

В принципе,

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

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

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

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

Ответ 4

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

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

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

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

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

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

Ответ 5

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

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

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

Ответ 6

Первый разговор о

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

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

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

Ответ 7

  • Value Object: используйте, когда необходимо измерить равенство объектов на основе значения объектов.
  • Data Transfer Object: передача данных с несколькими атрибутами в одном кадре от клиента к серверу через слой, чтобы избежать нескольких вызовов на удаленный сервер.
  • Обычный старый Java-объект: это как простой класс, свойства которого, общедоступный конструктор без аргументов. Как мы заявляем для субъекта JPA.

Разница между ними значением объектно-шаблоны и-данными передачи-паттерн