___>запросить сумму;
___>Tran.Begin();
___>try
___>{
___> вычесть сумму в БД; // здесь может быть исключение
___> выдать в купюроотдатчик; // и здесь
дождаться сигнала от банкомата, что деньги были выбраны из купюроотдатчика
если таймаут и купюроотдатчик заглотил деньги, то Tran.Rollback();
___> Tran.Commit();
___>}
___>catch(...)
___>{
___> Tran.Rollback();
___> throw; -- исключение полетело по иерархии выше
___>}
___>
Re[14]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C> дождаться сигнала от банкомата, что деньги были выбраны из купюроотдатчика C> если таймаут и купюроотдатчик заглотил деньги, то Tran.Rollback();
А сколько он их заглотил? Может я одну купюру незаметно утянул?
Re[15]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, WFrag, Вы писали:
C>> дождаться сигнала от банкомата, что деньги были выбраны из купюроотдатчика C>> если таймаут и купюроотдатчик заглотил деньги, то Tran.Rollback();
WF>А сколько он их заглотил? Может я одну купюру незаметно утянул?
А Вы попробуйте.
Re[13]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, _d_m_, Вы писали:
___>Это уже съезжаешь с темы, юлишь. ___>Ведь мы рассматриваем разницу в софте так? Если конечно деньги застрянут в купюродтатчике (или как его там) — здесь софт не поможет. Хотя и там существуют какие-либо датчики, которые могут участвовать в транзакции.
Мы тут имеем дело не с софтом, а как минимум с двумя софтами, взаимодействующими по электрическим сетям связи
И то, что одна сторона поймает исключение и прервет транзакцию не означает, что другая сторона об этом узнает. С этим можно бороться всякими многоуровневыми хендшейками, но все равно кто-то должен сказать последнее слово, на которое уже не ожидается подтверждающий ответ.
Поэтому гарантировать можно что-то одно из двух: либо что операция случится не более одного раза, либо что не менее одного раза. Но невозможно гаратнировать одновременно и то и то.
Re[16]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>>> дождаться сигнала от банкомата, что деньги были выбраны из купюроотдатчика C>>> если таймаут и купюроотдатчик заглотил деньги, то Tran.Rollback();
WF>>А сколько он их заглотил? Может я одну купюру незаметно утянул?
C>А Вы попробуйте.
Не хочется с банком потом разбираться. Камера же ещё снимает. Не вижу проблем придержать пачку денег и дернуть одну купюру.
А вообще, если банкомат обратно заглатывает деньги, то на счёт-то он их не возвращает (надо писать заявление в банк). Так что по факту там нет rollback. Возможно, это зависит от банка/банкомата.
iHateLogins wrote:
> Нет, это не всё. Ты давай ответь по существу, что такого замечательного ты написал на (C#? > java?), что ты говоришь о C++, как о "убогом" языке?
Судя о том что тут уже 4 дня нету ответов — ты попал в самую точку
Здравствуйте, Sheridan, Вы писали:
>> Нет, это не всё. Ты давай ответь по существу, что такого замечательного ты написал на (C#? >> java?), что ты говоришь о C++, как о "убогом" языке?
S>Судя о том что тут уже 4 дня нету ответов — ты попал в самую точку
Шеридан, Вы уже разобрались с тернарным оператором?
criosray wrote:
> S>Судя о том что тут уже 4 дня нету ответов — ты попал в самую точку > Шеридан, Вы уже разобрались с тернарным оператором?
Ой, и правда страшное слово. Рычащее, тупоносое...
Posted via RSDN NNTP Server 2.1 beta
Matrix has you...
Re[14]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, _d_m_, Вы писали:
___>>Это уже съезжаешь с темы, юлишь. ___>>Ведь мы рассматриваем разницу в софте так? Если конечно деньги застрянут в купюродтатчике (или как его там) — здесь софт не поможет. Хотя и там существуют какие-либо датчики, которые могут участвовать в транзакции.
Pzz>Мы тут имеем дело не с софтом, а как минимум с двумя софтами, взаимодействующими по электрическим сетям связи
Это называется — распределенная транзакция. Ничего экстраординарного.
Pzz>И то, что одна сторона поймает исключение и прервет транзакцию не означает, что другая сторона об этом узнает. С этим можно бороться всякими многоуровневыми хендшейками, но все равно кто-то должен сказать последнее слово, на которое уже не ожидается подтверждающий ответ.
Нам хэндшейки нужны только на Commit-e. Больше нигде. Серверу вообще пофиг — что там у клиента исключение или что еще. Ему дали команду списать деньги, а дальше одно из двух — либо комит, либо ролбэк.
Всего-то надо:
— клиенту знать, что комит успешен;
— серверу, что клиент получил уведомление об успешности комита — вот тогда наступает реальный комит.
Pzz>Поэтому гарантировать можно что-то одно из двух: либо что операция случится не более одного раза, либо что не менее одного раза. Но невозможно гаратнировать одновременно и то и то.
Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.
Re[15]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, _d_m_, Вы писали:
___>Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.
Вроде существуют способы сделать 100% транзакционность в распределенной среде.
Re[16]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, _d_m_, Вы писали:
___>>Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.
G>Вроде существуют способы сделать 100% транзакционность в распределенной среде.
Не верю! Невозможно.
Re[17]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, _d_m_, Вы писали:
___>>>Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.
G>>Вроде существуют способы сделать 100% транзакционность в распределенной среде.
___>Не верю! Невозможно.
Ну почему же, возможно, если речь о простом терминале, коим и является по сути банкомат. Транзакция коммитится только в случае, если от банкомата пришло подтверждение, что клиент забрал деньги из лотка.
Re[18]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>Ну почему же, возможно, если речь о простом терминале, коим и является по сути банкомат. Транзакция коммитится только в случае, если от банкомата пришло подтверждение, что клиент забрал деньги из лотка.
Ага. Банкомат выдаёт деньги в лоток, сеть отрубается, клиент забирает деньги, транзакция на сервере откатывается. Круто.
Re[17]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, _d_m_, Вы писали:
___>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, _d_m_, Вы писали:
___>>>Ну конечно 100% нет. Но с учетом вышесказанного мной, здесь мы уже переходим в раздел вероятностей, где обезьяны печатают "Война и мир" случайными нажатиями.
G>>Вроде существуют способы сделать 100% транзакционность в распределенной среде.
___>Не верю! Невозможно.
Координатор транзакций, которому доверяют все участники процесса, вроде как решает такую проблему.
Здравствуйте, Antikrot, Вы писали:
A>Здравствуйте, criosray, Вы писали:
C>>>>(подсказка: бесконечный цикл) M_>>>садитесь, два. M_>>>Если бы Вы знали, как работает стэк, то поняли бы, что запись в array[4] затрет внешнюю (по отношению к циклу) переменную i, и никаким образом на количестве итераций не скажется. C>>Опечатка конечно подразумевалось for (i = 0; A>не-не, изначальный вариант тоже может вызвать зацикливание (при определенных условиях).
при каких?
Re[19]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, WFrag, Вы писали:
C>>Ну почему же, возможно, если речь о простом терминале, коим и является по сути банкомат. Транзакция коммитится только в случае, если от банкомата пришло подтверждение, что клиент забрал деньги из лотка.
WF>Ага. Банкомат выдаёт деньги в лоток, сеть отрубается, клиент забирает деньги, транзакция на сервере откатывается. Круто.
А если подумать?
А если подумать, то при откате транзакции сумма блокируется до выяснения обстоятельств.
Re[20]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>>>Ну почему же, возможно, если речь о простом терминале, коим и является по сути банкомат. Транзакция коммитится только в случае, если от банкомата пришло подтверждение, что клиент забрал деньги из лотка.
WF>>Ага. Банкомат выдаёт деньги в лоток, сеть отрубается, клиент забирает деньги, транзакция на сервере откатывается. Круто.
C>А если подумать? C>А если подумать, то при откате транзакции сумма блокируется до выяснения обстоятельств.
Имелось в виду при обрыве связи с банкоматом.
Re[3]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>Здравствуйте, March_rabbit, Вы писали:
C>>>http://habrahabr.ru/blogs/lifehack/64627/
C>>>"Прелесть" С++ (кто представляет себе ассемблерный код после компиляции поймет что в таком случае произойдет): C>>>
C>>>int i;
C>>>int array[4];
C>>>for (int i = 0; i <= 4; i++) {
C>>> array[i]=0;
C>>>}
C>>>
C>>>(подсказка: бесконечный цикл) M_>>садитесь, два. M_>>Если бы Вы знали, как работает стэк, то поняли бы, что запись в array[4] затрет внешнюю (по отношению к циклу) переменную i, и никаким образом на количестве итераций не скажется. C>Опечатка конечно подразумевалось for (i = 0; C>Если Вам нравится цепляться к словам, то и я прицеплюсь к Вашим: в языке С конструкция for (int i;... синтаксически некорректна. C>Садитесь, два.
не удалось перевести тему (смотрим выделенное). Так что, не сяду
Ну а насчет придирок к словам — если в результате ошибки в словах получается неверный вывод — то следует придираться. Не было бы далекоидущих выводов — я бы и времени на ответ тратить не стал.
Да и вообще, код безграмотный. С таким подходом в любом языке можно наваять фигню, послое чего смело утверждать, что язык — г....
Re[20]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, criosray, Вы писали:
C>А если подумать? C>А если подумать, то при откате транзакции сумма блокируется до выяснения обстоятельств.
Тогда другой вариант. Из всей пачки денег клиент выдергивает 1 купюру из середины. Банкомат забирает деньги обратно, дальше что? Он их пересчитывать будет?
Re[4]: Модульные тесты и "безопасные" языки - хорошо.
Здравствуйте, March_rabbit, Вы писали:
M_>Да и вообще, код безграмотный. С таким подходом в любом языке можно наваять фигню, послое чего смело утверждать, что язык — г....
С той разницей, что на С++ это гораздо легче сделать и сложнее отладить.