|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
Добрый день, форумчане! Не знал, куда запостить вопрос, попробую здесь. Допустим у меня есть классы бизнес-логики наподобие: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Допустим, что для ранее загруженного объекта я поменял фамилию. Но на этапе сохранения данных в БД произошла ошибка СУБД (констрейнт или ещё что-либо, в данном контексте это не важно). Было принято решение откатить транзакцию. Но есть одна загвоздка: старой фамилию уже нет. Очевидно, что для обхода данной проблемы необходимо где-то хранить старые данные до подтверждения бизнес-транзакции. И где это хранить? Не хочется хранить в классах БЛ, так как это приведёт к неоправданному усложнению последних. У кого какие мысли есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 14:56 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
у Вашего объекта должно быть еще поле хранения первичного ключа записи данных. При ошибки изменения данных объект должен перечитать запись в базе С уважением, Naf ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 15:16 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
Antoshka Было принято решение откатить транзакцию. Но есть одна загвоздка: старой фамилию уже нет. Очевидно, что для обхода данной проблемы необходимо где-то хранить старые данные до не понял проблемы. - откатывает транзакцию СУБД - если ошибка в субд, то никакие твои телодвижения и старые значения не нужны (они в СУБД) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 15:37 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
Nafу Вашего объекта должно быть еще поле хранения первичного ключа записи данных. При ошибки изменения данных объект должен перечитать запись в базе А если объектов много, не дороговат ли будет такой откат транзакции? Неужели в случае ошибки всё перечитывать из БД? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 15:42 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
AntoshkaNafу Вашего объекта должно быть еще поле хранения первичного ключа записи данных. При ошибки изменения данных объект должен перечитать запись в базе А если объектов много, не дороговат ли будет такой откат транзакции? Неужели в случае ошибки всё перечитывать из БД? Еще дороже устравить откат транзакции своими средствами ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 15:46 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
AntoshkaУ кого какие мысли есть?Перечитать Фаулера - он на эту тему распространялся. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 16:29 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
Antoshka пишет: Но есть одна загвоздка: старой фамилию уже нет. Если вы откатите транзакцию, то она будет. > Очевидно, что для обхода данной проблемы необходимо где-то хранить > старые данные до подтверждения бизнес-транзакции. нет, не нужно. Собственно, транзакции для этого и придуманы - вы меняете всё что ни поподя, получилось - хорошо, не получилось -- всё как будто бы вы ничего не делали остаётся. И где это хранить? Не > хочется хранить в классах БЛ, так как это приведёт к неоправданному Ну это было бы вообще смешно - для подтверждения одних транзакций вы храните данные в базе данных, для чего делаете новые транзакции, а где тогда хранить данны для подтверждения последних ? Может быть вы перешли бы с чисто теоретического уровня на сугубо практический, тогда бы вам быстрее подсказали, как это делать ? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 21:24 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
Bely пишет: > Перечитать Фаулера - он на эту тему распространялся. Не подскажете, где конкретно ? в какой книге хотя бы ? Я бы почитал. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 21:25 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
О! Классный вопрос.. Бизнес объекты для работы механизма транзаций кешируются. Причем кешей может быть два и больше: 1. Глобальный кеш, общий для всех процессов Application сервера 2. Локальный кеш, принадлежащий клиентскому процессу При получении объекта на чтение - дается ссылка на объект в глобальном кеше При получении объекта на запись - объект копируется в локальный кеш, клиенту дается ссылка на объект локального кеша, объект в глобальном кеше блокируется на запись для других клиентов (обычно). Т.О. транзационность может быть реализована механизмами кеширования ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 22:55 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
етить.. столько писал - куда нафиг делось???... Короче - ищите Фаулера в электронном виде. Если чего не понятно - разжую. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2008, 22:59 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
anonimouse Бизнес объекты для работы механизма транзаций кешируются. Причем кешей может быть два и больше: вы забыли указать - для "n-звенок" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2008, 09:15 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
MasterZiv Bely пишет: > Перечитать Фаулера - он на эту тему распространялся. Не подскажете, где конкретно ? в какой книге хотя бы ? Я бы почитал. "Архитектура корпоративных программных приложений" ИСПРАВЛЕННОЕ ИЗДАНИЕ Мартин Фаулер (при участии Дейвида Раиса, Мэттыо Фоммела, Эдварда Хайета, Роберта Ми и Рэнди Стаффорда) Издательский дом Вильямс Москва • Санкт-Петербург • Киев 2006 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2008, 09:50 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
anonimouseетить.. столько писал - куда нафиг делось???... "Ктулху зохавал" :) anonimouse Короче - ищите Фаулера в электронном виде. anonimouse +1 однозначно Если чего не понятно - разжую. Там всё понятно - если читать меееедленно и три раза без отрыва от производства. Тьфу, от практики то бишь :) + там же куча ссылок на книги для более любопытных к деталям товарищей ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2008, 09:55 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
[quote]Там всё понятно - если читать меееедленно[/quote] Именно. "Архитектура корпоративных.." содержит больше скрытых проблем, чем освещает. Фаулера читать нужно именно как отправную точку. Ценность этой книги в том, что она содержит структурированную информацию об основных пробемах. Что касается транзационности через кеширование - обращаю внимание на наличие следующих моментов: а. Параллельные внутрисессиионные транзакции. б. Вложеные внутрисессиионные транзакции. с. Пересекающиется внутрисессиионные транзакции. Теперь добавляем межсессионные транзакции... надеюсь понятна завлекательность темы? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2008, 16:43 |
|
Кто ответственен за хранение новых и старых значений до подтверждении транзакции
|
|||
---|---|---|---|
#18+
Antoshka Допустим, что для ранее загруженного объекта я поменял фамилию. Но на этапе сохранения данных в БД произошла ошибка СУБД (констрейнт или ещё что-либо, в данном контексте это не важно). Было принято решение откатить транзакцию. Но есть одна загвоздка: старой фамилию уже нет. Очевидно, что для обхода данной проблемы необходимо где-то хранить старые данные до подтверждения бизнес-транзакции. И где это хранить? Не хочется хранить в классах БЛ, так как это приведёт к неоправданному усложнению последних. У кого какие мысли есть? Нет описания именно проблемы . В зависимости от того откуда беруться новые значения и что Вы планируете делать дальше зависит и где хранить первоначальные значения и хранить ли их вообще. Например, если у вас 3х-звенка и между UI и business layer ходят DTO, то просто выкидываете все бизнес-обьекты и кидаете ошибку. UI потом пришлет новые DTO, а business layer подгрузит страые объекты из базы. Достаточно просто и дешево (по сравнению с остальными затратами на такую модель). ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2008, 19:03 |
|
|
start [/forum/topic.php?fid=33&msg=35676869&tid=1548655]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 237ms |
0 / 0 |