Java Beans

Открыта

— Вот ты где.

Я тут подумал и решил устроить тебе еще одну маленькую лекцию, которая будет тебе очень полезна. Пока ты не работал программистом, ты, скорее всего, не сталкивался со специальной терминологией, и я хочу тебя сейчас познакомить с несколькими распространёнными понятиями.

Лет 10 назад массовое распространение получила концепция EJB – Enterprise Java Beans.

— А что значит Java Beans?

— Bean по-английски боб. А Java Beans – это, стало быть, кофейные бобы (Java – сорт кофе). Такой айтишный юмор.

Бизнес-логику программы представляли в виде набора высокоуровневых объектов – бинов, которые умели обмениваться сообщениями, сохранять себя, находить друг друга по имени, и еще кучу всего. Обычно это достигалось за счет специального супер-навороченного родительского класса, хотя были и другие подходы. Поведение таких объектов очень регламентировалось.

Три самых известных вида EJB-бинов:

Entity Bean – бин, цель которого — хранить некоторые данные. В логику такого бина встроен механизм сохранения себя и своих полей в базу данных. Такой объект может быть уничтожен, а потом воссоздан из базы заново. Но кроме хранения данных у него нет никакой логики.

Session Bean – это функциональный бин. У каждого Session Bean есть своя функция. Один делает одно, другой другое. Такие бины работают с другими объектам и бинами, а не со своими данными.

Session Beans делятся на две категории.

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

Statefull Session Bean – это бин, который хранит у себя внутри данные, которые использует при работе. Если мы вызываем методы этого бина, то в каждом следующем вызове он может использовать часть данных, переданных ему в предыдущих. И все равно этот бин – это не то же самое, что обычный объект.

Но в использовании бинов тоже было не все так радужно, поэтому скоро маятник качнулся в обратную сторону. И разработчики стали все чаще использовать обычные объекты. Им даже придумали специальное название.

POJO (Plain Old Java Object) – старый обычный Java-объект. Такие объекты не обладали какими-то суперфункциями и не наследовались от суперобъектов. Самые обычные Java-объекты.

Когда ты познакомишься с EJB на практике, ты поймешь, в чем разница. Грубо говоря, POJO – это нож, а EJB – это швейцарский нож, по которому можно еще и звонить.

— Интересное сравнение.

— Да, вот еще что.

Со временем в назначении объектов/классов возникла специализация. Как результат – выделились некоторые роли, объекты которых получили новые названия.

DTO — Data Transfer Object – объект, который создается с целью быть использованным при транспортировке данных. Обычно к таким объектам два требования: а) уметь хранить данные, б) уметь сериализоваться. Т.е. их используют только для пересылки данных.

Создал объект, записал в него нужные данные из бизнес-логики, сериализовал в JSON/XML и отправил куда-надо. Или наоборот – пришло сообщение – десериализовал его в DTO-объект и вытягивай из него данные.

Entity – это объект, который хранится в базе данных. Но они не содержат никакой бизнес-логики. Можно сказать, что это – данные бизнес-модели.

Есть еще DAO – Data Access Object. Задача DAO — сохранять объекты в базу и доставать их из нее. Entity сам такой работой не занимается – он не содержит никакой логики и, следовательно, не может ничего никуда сохранять.

Пример:

Взаимодействие DAO и Entity
UserEntity user = UserDAO.getUserById("1535");
if (user.getAge()>18)
{
 user.setMobilization(true);
 UserDAO.save(user);
}
Комментарии
UserEntity – это класс, который хранит данные о пользователе (User-Entity)
UserDAO – это класс, который достает данные (объекты UserEntity) из базы и сохраняет их туда, после изменений.

На этом все.

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

Но я хочу, чтобы ты хотя бы представлял, о чем речь, если столкнёшься с такими вещами в разговоре, переписке, на форуме или на собеседовании.

— Гм. Спасибо, Билаабо. Да, думаю, технических терминов мне не хватает. Спасибо большое тебе еще раз.

Комментарии (38)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Assanali Software Developer
26 декабря 2024, 15:37
получается DAO это сейчас репозиторий? есть аннотация в спринге @Repository (org.springframework.stereotype.Repository) и всякие CrudRepository, JPARepository(org.springframework.data.jpa.repository.JpaRepository) - это все всходит в понятие DAO?
Denis Odesskiy Full Stack Developer
13 декабря 2024, 00:40
"Каждую из этих тем можно днями рассказывать, а EJB – годами.". Ну лично у меня на прочтение данной лекции ушло около минуты.😄
Juki
Уровень 51
9 ноября 2023, 08:49
Поделитесь, спрашивали ли кого-то на собесах об этом) на начальном уровне
Kurama
Уровень 50
20 марта 2023, 21:24
"Session Bean – это ... Такие бины работают с другими объектам и бинами, а не со своими данными. Session Beans делятся на две категории. Stateless Session Bean – это ... Statefull Session Bean – это бин, который хранит у себя внутри данные, которые использует при работе."
Dima Makarov
Уровень 42
21 апреля 2023, 10:38
Для JR это норм, в одной и той же лекции противопоставлять самим себе (а все из-за того, что опускаются очень важные детали)
Кристина
Уровень 29
20 февраля 2023, 10:21
всё рассказали, кроме того, что же такое бин. человеку, который ещё с этим не сталкивался, будет сложно понять эту лекцию
Andrei Kopyrin #3180817 Backend Developer
14 января 2023, 16:59
Смешной участок кода про DAO. Вернее, не очень.
Garik
Уровень 38
23 января 2023, 15:14
это, видимо, чтоб лучше запомнилось)
Anonymous #3113984
Уровень 51
24 августа 2022, 10:24
Ilia lenskii
Уровень 32
17 сентября 2022, 13:13
Новый сотрудник 23 лет от роду, пытается мне 40му, объяснить, что если мы будет использовать kubernetes + docker, то у нас будет много маленький красивых жемчужин (бриллиантов) микросервисов. Но я то знаю, что он хочет получить опыт, а потом уволиться. Ему всё равно что наш продукт крутиться в закрытом конуре, где не доступен Интернет и прочее. Как вижу это я
Regina CQA Auto Engineer в -
30 мая 2021, 13:44
про DTO и POJO понравилось вот здесь - Наглядный пример различия DTO, POCO (POJO) и Value Object
Е К
Уровень 41
25 июня 2021, 12:54
Спасибо! Хорошая статейка
Булат
Уровень 37
13 мая 2021, 09:42
>
if (user.getAge()>18)
{
 user.setMobilization(true);
> товарищ майор добрался до Java, черт
Ilia lenskii
Уровень 32
17 сентября 2022, 13:15
Но ведь правильно: >= Нет?
Булат
Уровень 37
1 ноября 2022, 17:59
фак, сейчас зайдя сюда после годика уже работы, и в текущих реалиях войны этот коммент уже не таким смешным кажется...
Димитрий
Уровень 41
29 ноября 2022, 16:56
Шутка перестала быть смешной в 2022 году
Евгений Т.Full Stack Developer в Отличная компания
20 декабря 2022, 06:32
Вот вот, тоже хотел об этом написать :) как то очень злободневно получается :)
hidden #2322530
Уровень 41
9 сентября 2020, 12:45
все в духе JavaRush, вначале на 35 вы решите тестовое задание на стажировку, а в следующих лекциях мы только вам расскажем что к чему там вообще