Ответ 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.