Вопрос

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

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

Это было полезно?

Решение

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», были установлены правила:

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

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.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top