powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
6 сообщений из 6, страница 1 из 1
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
    #33920011
Vetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет!

Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session и прочими hibernate-классами?

Вот пример. Есть работа с клиентом в слое бизнес-логики. Нужно, например, снять 10 долларов со счета клиента. Как правильно поступать:

1 ) Работать с хибернейт классами в слое бизнес логики:
Client e = (Client) session.load(Client.class, myClientId);
e.minusDollars(10);
session.saveOrUpdate(e);
session.flush();

2 ) Работать с хибернейт классами через класс-посредник:
public class ClientMapper{
public static void minusDollars(Integer myClientId){
Client e = (Client) session.load(Client.class, myClientId);
e.minusDollars(10);
session.saveOrUpdate(e);
session.flush();
}
и в слое бизнес-логики:
ClientMapper.minusDollars(myClientId);

Тогда слой бизнес-логики не будет ничего знать о hibernate. Как думаете, какой вариант лучше? И стоит ли заморачиваться, создавая второй вариант?

Всем заранее спасибо!
...
Рейтинг: 0 / 0
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
    #33920201
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Палюбому второй. Яб сделал так, создаем интерфейс ClientMapperInterface с необходимыми методами, его имплементацию ClientMapperHibernate уже с реализацией методов. А потом можно мапперов наклепать сколько хочешь, типа ClientMapperXML, ClientMapperSQL, ... а все бы это настраивалось в какой нибудь xml'e. И шаблончиком Builder создавалась нужный класс. Мне кажется хороший вариант.
Тоже хотелбы посмотреть на другие варианты.
...
Рейтинг: 0 / 0
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
    #33920359
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня три слоя:

dao
service
web

В слое dao находится ClientDAO

Если сервлет в web слое делает что-то простое, например кладет в request список клиентов, то ShowClientListController сразу использует ClientDAO.loadAllClients();

Если же делает что-то сложное, то использует к примеру AccountService, который в свою очередь использует dao слой.

Иногда случается так, что нужно из слоя бизнес-логики (в моем случае service) напрямую обратится к hibernate session. Думаю, в этом ничего плохого нет.
...
Рейтинг: 0 / 0
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
    #33920464
pretender
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно тут почитать, если еще не читали. Там даже пример чем-то на Ваш похож (maxBid,minBid).
...
Рейтинг: 0 / 0
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
    #33921068
Vetal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем!
То-есть, вы предлагаете использовать паттерн DAO ВСЕГДА при более-менее больших программных системах?
...
Рейтинг: 0 / 0
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
    #33923534
Alexey Turn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VetalСпасибо всем!
То-есть, вы предлагаете использовать паттерн DAO ВСЕГДА при более-менее больших программных системах?

Использовать dao вполне удобно для reuse кода. Когда нужно очередной раз выгрести к примеру клиента по id, вспоминается, что есть класс, который скорее всего это может сделать.

2 Vetal

Предположим, что ты передал проект другому программисту, либо с ростом системы просто забыл что когда-то писал метод ClientMapper.minusDollars(Integer myClientId, Double dollars); и тебе опять необходимо снять c клиента dollars денег.

Вспоминаем... ага, что-то подобное в прошлом делали.... хмм был же какой-то метод снимающий деньги с клиента...

Не очевидно, что этот метод должен принадлежать dao классу ClientMapper(СlientDAO).

Имхо в классе ClientMapper(ClientDAO) надо оставить функциональность, отвечающую за выгребание и сохранение объектов Client, а бизнес логику реализовывать в других классах, более подходящих по названию и функциональности.

Не претендую на правильность подхода, но это работает и не дает запутаться, когда кода довольно много.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]