|
|
|
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
|
|||
|---|---|---|---|
|
#18+
Всем привет! Правильно ли из слоя бизнес-логики работать непосредственно с 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. Как думаете, какой вариант лучше? И стоит ли заморачиваться, создавая второй вариант? Всем заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 20:14 |
|
||
|
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
|
|||
|---|---|---|---|
|
#18+
Палюбому второй. Яб сделал так, создаем интерфейс ClientMapperInterface с необходимыми методами, его имплементацию ClientMapperHibernate уже с реализацией методов. А потом можно мапперов наклепать сколько хочешь, типа ClientMapperXML, ClientMapperSQL, ... а все бы это настраивалось в какой нибудь xml'e. И шаблончиком Builder создавалась нужный класс. Мне кажется хороший вариант. Тоже хотелбы посмотреть на другие варианты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2006, 23:50 |
|
||
|
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
|
|||
|---|---|---|---|
|
#18+
У меня три слоя: dao service web В слое dao находится ClientDAO Если сервлет в web слое делает что-то простое, например кладет в request список клиентов, то ShowClientListController сразу использует ClientDAO.loadAllClients(); Если же делает что-то сложное, то использует к примеру AccountService, который в свою очередь использует dao слой. Иногда случается так, что нужно из слоя бизнес-логики (в моем случае service) напрямую обратится к hibernate session. Думаю, в этом ничего плохого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 07:39 |
|
||
|
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
|
|||
|---|---|---|---|
|
#18+
Можно тут почитать, если еще не читали. Там даже пример чем-то на Ваш похож (maxBid,minBid). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 09:14 |
|
||
|
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
|
|||
|---|---|---|---|
|
#18+
Спасибо всем! То-есть, вы предлагаете использовать паттерн DAO ВСЕГДА при более-менее больших программных системах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2006, 11:48 |
|
||
|
Правильно ли из слоя бизнес-логики работать непосредственно с hibernate.session?
|
|||
|---|---|---|---|
|
#18+
VetalСпасибо всем! То-есть, вы предлагаете использовать паттерн DAO ВСЕГДА при более-менее больших программных системах? Использовать dao вполне удобно для reuse кода. Когда нужно очередной раз выгрести к примеру клиента по id, вспоминается, что есть класс, который скорее всего это может сделать. 2 Vetal Предположим, что ты передал проект другому программисту, либо с ростом системы просто забыл что когда-то писал метод ClientMapper.minusDollars(Integer myClientId, Double dollars); и тебе опять необходимо снять c клиента dollars денег. Вспоминаем... ага, что-то подобное в прошлом делали.... хмм был же какой-то метод снимающий деньги с клиента... Не очевидно, что этот метод должен принадлежать dao классу ClientMapper(СlientDAO). Имхо в классе ClientMapper(ClientDAO) надо оставить функциональность, отвечающую за выгребание и сохранение объектов Client, а бизнес логику реализовывать в других классах, более подходящих по названию и функциональности. Не претендую на правильность подхода, но это работает и не дает запутаться, когда кода довольно много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2006, 07:57 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2148389]: |
0ms |
get settings: |
10ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
173ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 294ms |
| total: | 556ms |

| 0 / 0 |
