|
|
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, такая ситуация: Хочу отдельно сущности (POJO) с бизнес логикой, отдельно персист на основе Hibernate. Так чтобы логика могла обращаться к персисту по вопросам CRUD. С простыми операциями все решается, но у меня возникают ситуации, когда перед сохранением сущности нужно выполнить ряд действий с целью вычисления некоторых из ее свойств и проверки на возможность сохранения. При этом в процессе выполнения действий могут быть получены из базы/созданы другие сущности и они так же должны быть сохранены (в случае успешной проверки). Вопрос: куда мне приткнуть эти проверки и действия? сделать их методами самой сущности? не могу потому что проверка+создание других сущностей+запись должны выполняться в одной транзакции, а прямой доступ к сессиям и транзакциям из логики делать я не могу. Вынести отдельно - ну все-таки это личное дело сущности, как проверять и что делать перед записью, получается некрасиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 17:44:14 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerХочу отдельно сущности (POJO) с бизнес логикой Зачем что-нипопадя обзывать POJO - мне не ясно. Почитайте определения этого термина. Сущность так и называют - Entity. POJO это объект отвязаный от какой-либо инфраструктуры. Можете поискать по форуму, уже несколько раз объяснял. javapecker, отдельно персист на основе Hibernate. Это очень странное желание, так как хибернейт очень сильно влияет на реализацию логики. Это и ленивые загрузки и dirty check. javapeckerТак чтобы логика могла обращаться к персисту по вопросам CRUD. Ну, а как иначе. javapeckerа прямой доступ к сессиям и транзакциям из логики делать я не могу. Сессии и транзакции это не одно и тоже. Всегде можно обойтись без прямого доступа через менеджер и привязку к потокам. А управление транзакциями это вообще одна из задач бизнес-логики. В целом, же похоже, что вы бросаетесь в крайности в попытке реализовать Rich Domain Model без Transaction Script. Те сложности, о которых вы говорите, давно и успешно все решают через "сервисы" aka Transaction Script. Сервисы отвечают за процесс и управляют транзакциями. Зачем это всё сущностям - вопрос открытый. Рекомендую хотя бы к поверхностному просмотру: http://rsdn.ru/forum/design/4754417.flat.aspx http://rsdn.ru/forum/design/3406168.flat.aspx http://rsdn.ru/forum/design/3636312.flat.aspx http://rsdn.ru/forum/design/3145651.flat.aspx http://rsdn.ru/forum/design/4688683.flat.aspx http://rsdn.ru/forum/design/3409738.flat.aspx http://rsdn.ru/forum/design/3619982.flat.aspx http://rsdn.ru/forum/design/4473246.flat.aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2012, 17:58:23 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerВопрос: куда мне приткнуть эти проверки и действия? сделать их методами самой сущности? не могу потому что rsdnВ противовес Domain Model паттерну, который пытается реализовать у мальчика Пети метод Покушать(), Поспать(), Искупаться(), анемичная модель реализует семь различных нянек, каждая из которых в зависимости от различных своих причуд насильно кормит мальчика Петю с ложечки, купает и укладывает спать. есть 2 концепции. Серебрянной пули - нет. ______________________________________________ "Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн. AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 09:38:23 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, Blazkowicz , большое спасибо за ликбез и ссылки. Теперь, если можно, давайте на примере. Я придумал пример приложения, которое описывает мою проблему. Есть благотворительное общество "ЖОР", производящее и бесплатно предоставляющее конфеты "Драже красное" и "Драже зеленое" (всего два вида) для детей из неблагополучных семей в любых количествах. "ЖОР" предоставляет конфеты в ящиках. В каждом ящике два отсека, по одному для каждого вида драже. Емкость отсеков, их соотношение и размер ящиков могут быть изменены произвольно по желанию "ЖОР". И есть группа добрых людей "Детолюбы" , в свободное от работы время упаковывающие конфеты в мешки, и непосредственно раздающие детям. Единственное требование "ЖОР" - чтобы на мешках с конфетами были напечатаны номера ящиков, из которых взяты конфеты. Каждый мешок может содержать конфеты только одного вида. Процедура упаковки такая: "Детолюб" смотрит, есть ли у него в ящиках конфеты нужного вида. Если есть, насыпает в мешок сколько нужно и ставит печать с номером ящика, если не хватает, берет следующий ящик и сыпет из него. Если у него закончились ящики, идет в "ЖОР" и берет новый, и так пока не заполнит мешок конфетами. Мешки, кстати, тоже разного размера все. Таким образом, после упаковки мы имеем мешок с конфетами, на котором один или несколько штампов с номерами ящиков. Может случиться так, что "ЖОР" откажется предоставить очередной ящик с конфетами, таким образом не будет достаточно конфет чтобы заполнить мешок. Тогда "Детолюб" должен высыпать из мешочка то что он туда уже насыпал обратно в те ящики, из которых брал. "Детолюб" никогда не может взять ящик "про запас". Только для того чтобы положить оттуда в мешок что-нить. Если вдруг ребенок вернет мешок с конфетами, "детолюб" обязан высыпать все в ящики из которых брал, и если один из ящиков окажется полным, немедленно вернуть его в "ЖОР", и попросить следующий только когда он реально понадобится. Вот такая у меня история. Помогите мне, пожалуйста, найти хорошее отражение такой предметной области. Приложение должно автоматизировать деятельность "Детолюба", то есть предоставлять детям мешки с конфетами, и реализовывать описанные алгоритмы его поведения. Нужно использовать хибернейт. Небольшую иллюстрацию прилагаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 14:22:03 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker, круто:)) Художник или программист? Начинай писать ТУТ классы. И не забудь, что Бизнес-транзакция имеет мало отношения к технической транзакции сохранения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 14:41:26 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, ОК, пишем классы. Чтобы сильно много не писать, немного упрощу и изменю задачу. Ребенок сам приходит к "Детолюбу" и просит его дать ему мешок с конфетами, детолюб записывает пожелание ребенка, и пытается его выполнить - то есть найти конфеты в требуемом количестве. С учетом хибернейта, нарисую сначала статику: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Теперь нужно разобраться, где будет производиться заполнение partList и где будет проверяться, возможно ли выдать нужное количество конфет. Пусть новые Box-ы от "ЖОР" выдает специальный сервис: Код: java 1. 2. 3. Этот сервис заботится о том, чтобы выдать коробку с "ЖОР", иногда может отказать в выдаче и выбросить исключение Также пусть будет сервис, который выдает список коробок, уже полученных от "ЖОР", из которых уже когда-либо выдавались конфеты: Код: java 1. 2. 3. Теперь можно написать алгоритм обработки, или, насколько я понял, бизнес - транзакции.Пишу прямо здесь, так что может быть море ошибок. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Вот, теперь вопрос, как будет выглядеть та часть программы, которая будет отвечать за сохранение результатов этой транзакции в базу и откат в случае эксепшна? Ведь это чистая логика, я не хочу прямо сюда писать хиберню, но хочу чтобы у меня однозначно выполнилась такая транзакция: в случае успеха(когда конфет хватает) чтобы сохранился сам SweetPack, все новые Box(это самостоятельные сущности), и список частей SweetPack-а. В случае провала - чтобы сохранился только SweetPack, список частей очистился, все новые Box-ы не попали в базу. Кроме того, мне нужна такая штука: если ни у одного SweetPack нет ссылок через их списки на Box, я хочу чтобы этот Box был удален из базы. Уменьшение количества ссылок может происходить при реализации поведения "аля 1С" - когда я сознательно чищу список SweetPack, но не удаляю его самого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 18:33:12 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
ну и вид конфет пусть один будет, забыл написать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 18:41:45 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Неудача или откат - это вернуть все как было до начала транзакции. Поэтому перепиши эту часть постановки. Если конфет один вид то теряется весь смысл. Т.е. не ленись. Опиши сначала задачу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 19:21:30 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Кроме того. "Пошел за ящиком" это тоже подлежит автоматизации)))? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2012, 19:29:28 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, меняю постановку. Пусть у меня будет n видов конфет. Тогда классы изменятся следующим образом: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 01:10:16 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Блин..случайно энтер нажал. Продолжим. process() тоже изменится, но весь его описывать уже не буду. Вообщем получается так, что process() это и есть мой детолюб. Он получает заявку от ребенка - объект SweetPack, и инструкции что делать с этим объектом. А делать он может следующее: 1. Просто запомнить, что ребенок хочет конфет=записать объект с пустым списком partList. 2. Исполнить заявку - то есть записать объект, заполнив его partList - если не получит отлуп от JORService. 3. Принять от ребенка мешок обратно - очистить partList, записать объект.+ проверить, остались ли ссылки на используемые боксы. Если нет - удалить их. Исходя из этого, можно сказать, что Petro123 Кроме того. "Пошел за ящиком" это тоже подлежит автоматизации)))? подлежит! потому как именно process()-детолюб ходит за ящиком JORService.getBox(). Также из этого следует, что пользователь системы - это ребенок.Он составляет заявку - заполняет каких конфет и сколько он хочет в SweetPack, он определяет что с этим делать, нажимая на кнопки сохранить, выполнить и отмена (пункты 1,2,3) выше. Вообщем придется добавить в код вот это: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Теперь пункты 1,2,3 подробнее с точки зрения состояний объектов: 1. Сохранение - может применяться как к вновь созданному объекту, так и к полученному от персиста из базы. В первом случае объект просто записывается с пустым списком- process(SAVE) . Во втором - если список пуст, то просто записывается, если же список не пуст, то есть заявка выполнена, придется запускать process(POST) -потом записывать , так как данные могли измениться. 2. Выполнить - тоже как для вновь созданного, так и полученного объекта. при этом вне зависимости от состояния списка выполняется process(POST), потом записывается объект 3. Отмена - только для объекта полученного из персиста, у которого список не пуст. очищается список, объект записывается process(CANCEL) То есть во всех трех случаях вне зависимости от проверок объект записывается, все варианты относятся только к состоянию списка - то есть заявку от ребенка детолюб примет в любом случае, вопрос сможет ли он ее выполнить, и захочет ли этого сам ребенок. Поэтому эта фраза Petro123Неудача или откат - это вернуть все как было до начала транзакции. Не совсем верна, объект полюбому надо записать, а вот список надо очистить в случае неудачи. Как-то так. Возвращаясь к баранам 1.С какой стороны прикрутить персист сюда, не мешая его с логикой? 2. Как обеспечить удаление боксов на которые нет ссылок? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 01:47:59 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
>Вообщем получается так, что process() это и есть мой детолюб === неверно. Если автоматизировать процесс, То надо вводить сущность процесс и его состояния. А это геморрой в архитектуре и в разы усложняет ИС. Это понять очень просто идя по ГОСТу разработки: - после словесного описания нужны ВИ или преценденты - разделить всё на Пользователь ---Система (ИС). Т.е. нет никаких Детолюбов. Есть - Система (ИС). Например: ВИ №1 - "Заявка на конфеты" - Открыл окно Заявка на конфеты - Вбил количество коныет - Нажал кнопку "Подобрать" - ....... Это должно быть ДО диаграммы классов. Остальное попозже допишу... ______________________________________________ "Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн. AutoPOI.ru — ГИС-технологии для Oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 13:46:57 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123Кроме того. "Пошел за ящиком" это тоже подлежит автоматизации)))? подлежит! вот на этом - подробнее. Т.к. в Java любят всё усложнять из-за понятия Сервис\Сообщения\Поток сообщений\... .......... Итак, нафига тебе: - сохранять состояние процесса между сессиями, помня, что это Веб - запрос 40 миллисекунд = ответ, забыл о нём? - ты точно хочешь пойти по пути а-ля MTS - "Ваша заявка принята - результаты в Меню-СостояниеОперации"? Пока, такой геморрой не требуется. Флейм для пользы - Как хранить Состояние в 3-х звенке или Есть ли SpringСостояние? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 13:55:50 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
ЗЫ. Удивительно, как можно. без видимых причин, в 10 раз усложнить и удорОжить задачу. Это всё равно, что вместо большого запроса в СУБД, использовать курсор и перебирать по строкам (процесс). Это усложнение, только удаляет обсуждение от сабжа (анемичная модель). IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2012, 14:01:03 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, мы очевидно друг друга не понимаем, по крайней мере я вас не понимаю. Я почти уверен, что плохо объясняю чего хочу. Может быть вариант использования поможет, пытаюсь объяснить его максимально подробно. Я именно его и подразумевал когда писал классы. Все что за рамками этого варианта, оставим. ВИ1: Новая заявка. 1.Пользователь открывает форму заявки на конфеты. 2.Пользователь вводит желаемое количество конфет и их вид. 3. На форме три кнопки: сохранить, выполнить, отменить. Так как заявка новая, кнопка "отменить" неактивна. Пользователь хочет, чтобы его заявка была выполнена немедленно - и он нажимает на кнопку выполнить, немедленно запуская тем самым процесс выполнения заявки (многострадальный метод process()). Пока выполняется этот метод (выполняется он быстро, менее 5 секунд), пользователь ждет и не имеет возможности жмякать на кнопки. 4-1. Если заявку удалось выполнить, пользователь получает сообщение "заявка выполнена", кнопка "отмена" становится активной, на вкладке формы "информация о заявке" появляются данные об источниках конфет для выполнения заявки. Кроме того, пользователь, занимающийся отчетностью, сможет увидеть выполненную заявку в своих отчетах. 4-2. Если заявку не удалось выполнить, пользователь получает сообщение "заявка не выполнена" с указанием причин отказа, состояние активности управляющих кнопок не меняется, введенные данные сохраняются (то есть пользователь может закрыть форму, съездить в Крым, потом найти уже заполненную форму в списке, открыть и попытаться нажать кнопку "выполнить" снова), вкладка "информация о заявке" содержит пустой список. Вот еще уточняющие моменты: Petro123Итак, нафига тебе: - сохранять состояние процесса между сессиями, помня, что это Веб - запрос 40 миллисекунд = ответ, забыл о нём? - ты точно хочешь пойти по пути а-ля MTS - "Ваша заявка принята - результаты в Меню-СостояниеОперации"? -про веб я ни слова нигде не говорил -про сохранение информации между сессиями тоже (ну если считать сохранение сущности - то говорил, но это обычный персист. Да и что тут сверхъестественного? сохранил я заявку, через месяц открыл посмотрел, как тему в форуме например. Сохранение делал один вызов process() - одна транзакция, второй раз открою - обработкой будет заниматься другой process() -другая транзакция, между ними никакой связи нет) -я просто хочу знать, как мне описать метод process() системы, выполняющий заявку, чтобы непосредственно в нем не использовать напрямую методы хибернейта. Пересмотрите предыдущие посты с этой точки зрения, и тогда, я думаю, мы будем смотреть на ситуацию с одного бока. Так что process() - это все-таки детолюб , основная часть системы, обрабатывающая заявку пользователя. Сам по себе, как и живой детолюб, он не имеет состояний. Он переводит из одного состояния в другое саму заявку. То есть process() - это ровно то, чем я заменил живого детолюба. При этом модель получается анемичной в том смысле, что сущность "Заявка на конфеты" не обладает инкапсулированным поведением, за поведение отвечает метод сервиса, которому такая сущность передается входным аргументом. Повторюсь не помню какой раз - моя проблема в том что я не знаю как подружить process() и Hibernate, обеспечив целостность транзакции и не вызывая напрямую методов Hibernate, потому что в process() - моя логика, и я не хочу мешать ее с персистом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 00:09:42 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
вы уверены что ваам нужен хибер? activerecord не хотите попробовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 00:33:13 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
забыл ник, я месяц убил на хибернейт, и полагаю, что его возможностей хватит для такой задачи. Как выглядит то что вы предлагаете, я вообще не представляю. Если напишете как конкретно решить задачу используя это, и это будет проще и элегантнее чем с хибернейтом, то может и захочу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 01:58:55 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerзабыл ник, я месяц убил на хибернейт, и полагаю, что его возможностей хватит для такой задачи. Как выглядит то что вы предлагаете, я вообще не представляю. Если напишете как конкретно решить задачу используя это, и это будет проще и элегантнее чем с хибернейтом, то может и захочу. я счас почитаю, конечно, _длинный пост_ выше. Но, IMHO, краеугольный камень, это аксиомы: - большинство проектов тут, это веб авторпро веб я ни слова нигде не говорил - проекты НЕ веб - это десктоп\клиент-сервер - у вторых могут быть длинные транзакции, у первых тоже, но обоснованно - ваш Процесс претендует на длинную, либо через состояние, либо через механизмы самого хибера Это не штатный режим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 09:47:15 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapecker 3. На форме три кнопки: сохранить, выполнить, отменить ==== Нельзя. 1. Отменять нечего. Нельзя навешивать на одно окно (контроллёр) кучу логики с Enable-Disable\Visible 2. Либо кнопка Сохранить, Либо Выполнить - это к Вашим спецам по Визабилити. Они подтвердят. Пока выполняется этот метод (выполняется он быстро, менее 5 секунд), пользователь ждет и не имеет возможности жмякать на кнопки. 4-1. ======== кто сказал что он ждёт? Если вы специально делаете ограничение (неасинхронный процесс), то это одно. Ксли это Веб-AJAX то другое. Можно по всякому. 2. Почему 5 секунд? А не 0,5 мммм Зачем вы удлинняете процесс, который можно решить за 0,1 сек? Тут до Хибера ещё далеко. Я вас понял, но почему нужна именно заявка, а не сразу - результат за 0,1 сек? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 09:57:37 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
авторпоявляются данные об источниках конфет для выполнения заявки Итого 2 варианта: А - без заявок, в он-лайне - сразу результат, либо конфеты, либо Отлуп ))) Б - с заявкой. Но тогда нужны механизмы блокирования рессурса для заявки. Аналог жд. билеты. Что оооочень хреново. В одной кассе балеты на вагон есть, в другой - нет. Пока нет ТЗ на вариант Б, сложно искать техническое решение. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 10:03:39 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
автор4-1. Если заявку удалось выполнить, пользователь получает сообщение "заявка выполнена", кнопка "отмена" становится активной, на вкладке формы "информация о заявке" появляются данные об источниках конфет для выполнения заявки. Кроме того, пользователь, занимающийся отчетностью, сможет увидеть выполненную заявку в своих отчетах. берём аналог из соседней области ИС: 4-1. Если заявку удалось выполнить (АвиаБилет куплен), пользователь получает сообщение "заявка выполнена(АвиаБилет куплен)", кнопка "отмена" становится активной (??? Вернуть Билеты?), на вкладке формы "информация о заявке" появляются данные об источниках конфет для выполнения заявки. Кроме того, пользователь, занимающийся отчетностью, сможет увидеть выполненную заявку в своих отчетах (это OFFTOP). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 10:19:43 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, опять непонятки. Мне надо идти на курсы ясного выражения мыслей наверное. Давайте другую абстракцию попробуем, чтобы слово заявка вас так не смущало. Вам нужны продукты, у вас есть ребенок. вы можете: а) написать ему записку "чокупить" и сразу отправить в магазин б) написать ему записку в понедельник, а отправить с этой запиской в магазин в пятницу. Petro123==== Нельзя. 1. Отменять нечего. Нельзя навешивать на одно окно (контроллёр) кучу логики с Enable-Disable\Visible 2. Либо кнопка Сохранить, Либо Выполнить - это к Вашим спецам по Визабилити. Они подтвердят. Что плохого когда на форме есть и сохранить и выполнить и отменить? по-моему это удобно. Это как раз отражает в одном месте все то, что можно сделать с заявкой. Как это будет с отдельно сохранить/выполнить нарисуйте, если не сложно. я плохо себе такое удобство представляю. Petro123 Зачем вы удлинняете процесс, который можно решить за 0,1 сек? Да ничего я не удлиняю, просто прикинул сколько он будет выполняться на абсолютном корче при хреновом канале связи. В нормальных условиях пользователь и не заметит времени выполнения. Petro123А - без заявок, в он-лайне - сразу результат, либо конфеты, либо Отлуп ))) Именно так, но с небольшим уточнением. Приходите вы в ресторан, смотрите меню, и говорите: мне борщ, котлеты, пельмени, графин водки, торт, суши, пиццу и орешки. Официант говорит - ничего нет, приходите завтра(отлуп). И вы приходите, опять листаете меню и начинаете вспоминать, что же вы там заказывали(херово). А надо так: отлуп получили, заказ не получили, но информация о нем осталась, и вспоминать мучительно потом не придется. Petro123Б - с заявкой. Но тогда нужны механизмы блокирования рессурса для заявки. Разумеется нужны, но только на время выполнения process(),а это быстрый метод. Это во-первых, во-вторых блокировка ресурсов пока за рамками обсуждаемой задачи. Petro123Пока нет ТЗ на вариант Б, сложно искать техническое решение. Сначала классы, потом ВИ, теперь ТЗ)). почему сложно искать техническое решение именно для того вопроса который я задаю в каждом посте? Petro123Я вас понял, но почему нужна именно заявка, а не сразу - результат за 0,1 сек? ААААА!!!!! -мне результат нужен, мне безуууумно нужен результаааат. НО, если получить его я не могу, я хочу чтобы исходные данные остались в форме и все. Чтобы я мог открыть ее потом, и попробовать получить результат снова, не вводя никаких больше данных Petro123======== кто сказал что он ждёт? Если вы специально делаете ограничение (неасинхронный процесс), то это одно. Я вам говорю - он ждет, один поток, никакой асинхронности и точка.(в рамках моего вопроса) Petro123Аналог жд. билеты. Что оооочень хреново. В одной кассе балеты на вагон есть, в другой - нет. Согласен, такой проблемы избежать практически невозможно ,с той точки зрения что когда кассир смотрит наличие блиетов - может видеть устаревшую информацию на какой-нить необновленной страничке, но попытка продать/забронировать уже проданное место все вернет на круги своя. так что это мы отнесем к разряду вынужденных неудобств,и (в рамках моего вопроса) это меня абсолютно не беспокоит. Petro123- ваш Процесс претендует на длинную, либо через состояние, либо через механизмы самого хибера Это не штатный режим. Да где это он на длинную претендует? С чего вы взяли? Нет у Процесса никаких состояний, нету. Состояние есть у заявки плохое слово, обзовем ее документом, как в 1с, вы ее упоминали, значит знаете как она устроена. Документ в 1с может быть просто сохранен, может быть проведен - у него есть состояния, а у процесса ничего нет - это просто алгоритм "проведения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 10:56:30 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
Petro123, Petro1234-1. Если заявку удалось выполнить (АвиаБилет куплен), пользователь получает сообщение "заявка выполнена(АвиаБилет куплен)", кнопка "отмена" становится активной (??? Вернуть Билеты?) Вот, теперь я понял где я вас запутал, и запутал конкретно. Прощу прощения, пользователь, используя ваши аналогии - это кассир, а не пассажир. И он вполне может отменить продажу билета, если, например, ввел некорректные данные. Впоследствии, он их исправит и выполнит еще раз. Разумеется, не во всех случаях можно редактировать уже выполненные/проведенные/активные (как удобнее) документы/заявки. Но это тоже оффтоп ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:07:52 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123, Petro1234-1. Если заявку удалось выполнить (АвиаБилет куплен), пользователь получает сообщение "заявка выполнена(АвиаБилет куплен)", кнопка "отмена" становится активной (??? Вернуть Билеты?) Вот, теперь я понял где я вас запутал, и запутал конкретно. Прощу прощения, пользователь, используя ваши аналогии - это кассир, а не пассажир. И он вполне может отменить продажу билета, если, например, ввел некорректные данные. Впоследствии, он их исправит и выполнит еще раз. Разумеется, не во всех случаях можно редактировать уже выполненные/проведенные/активные (как удобнее) документы/заявки. Но это тоже оффтоп уж простите, свой ответ начну с вашего короткого поста. авторпользователь, используя ваши аналогии - это кассир - зря. Вы покупали билеты на tu-tu.ru и т.д.? Дак вот, в кассе кассир делает точно то-же что пользователь. Только сверху берёт 400 рублей. За то что вам лень интернет запустить. Итак, чем кассир отличается от пользователя? Вопрос интересный)))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:16:25 |
|
||
|
Hibernate: помогите с архитектурой
|
|||
|---|---|---|---|
|
#18+
javapeckerPetro123А - без заявок, в он-лайне - сразу результат, либо конфеты, либо Отлуп ))) Именно так, но с небольшим уточнением. Приходите вы в ресторан, смотрите меню, и говорите: мне борщ, котлеты, пельмени, графин водки, торт, суши, пиццу и орешки. Официант говорит - ничего нет, приходите завтра(отлуп). И вы приходите, опять листаете меню и начинаете вспоминать, что же вы там заказывали(херово). А надо так: отлуп получили, заказ не получили, но информация о нем осталась, и вспоминать мучительно потом не придется. у меня в А - так сделать не проблема. Обычный лог работы с клиентом. А чуть попозже - отдельная система CRM ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2012, 11:22:18 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37912697&tid=2131140]: |
0ms |
get settings: |
14ms |
get forum list: |
21ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
31ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
91ms |
get tp. blocked users: |
2ms |
| others: | 279ms |
| total: | 467ms |

| 0 / 0 |
