All streams
Search
Write a publication
Pull to refresh
0
0
Send message
Ну в общем-то да. Зато «нарисовался» другой вопрос — подходит ли этот паттерн в случае когда наш код является самым «верхним» по стеку, т.е. выше него уже нет кода. Как тогда быть, если команда НачатьТранзакцию() выбросит исключение? Что тогда произойдёт?
Кто будет обрабатывать исключение?
Да, вы верно меня поняли.
Не совсем так.
Смысл такой — написать код таким образом, чтобы в случае, если исключение происходило в команде
НачатьТранзакцию()
(при этом транзакция не начнётся — поскольку — исключение выкидывает) тогда команда
ОткатитьТранзакцию()
выполняться не должна, иначе возможен случай, когда мы откатим транзакцию, которую не мы начинали — т.е. откатим «чужую» транзакцию, которая не была начата в этом программном блоке.
Хорошо,
а так?

ЦелоеЧисло Ж;
Ж := 1;
Попытка 
       НачатьТранзакцию(); 
       Ж := 2;
       ДелаемЧтоТо(); 
       ЗафиксироватьТранзакцию(); 
Исключение 
	Если (  ТранзакцияАктивна() И (Ж==2)  )
		Тогда ОтменитьТранзакцию(); 
	КонецЕсли; 
	ВызватьИсключение; 
КонецПопытки;
Смысл я вкладывал такой:
Если инструкция НачатьТранзакцию() выбросит исключение
то попадаем в блок перехвата исключения и при этом
Если ( ТранзакцияАктивна() ) Тогда ОтменитьТранзакцию();
может вполне отменить некоторую другую транзакцию.
Для предотвращения этого введена целочисленная переменная Ж.
Если Ж=2 то значит команда НачатьТранзакцию() прошла успешно и в крайнем случае мы отменим «свою» транзакцию. Если Ж=1 это говорит о том, что команда НачатьТранзакцию() не была успешной (выбросила исключение) и в этом случае мы не будем выполнять ОтменитьТранзакцию(), так как «свою» мы так и не начали.
А как вам такой вариант?

ЦелоеЧисло Ж;
Ж=1;
НачатьТранзакцию(); 
Ж=2;
Попытка 
       ДелаемЧтоТо(); 
       ЗафиксироватьТранзакцию(); 
Исключение 
	Если ( ТранзакцияАктивна() И Ж=2)
		Тогда ОтменитьТранзакцию(); 
	КонецЕсли; 
	ВызватьИсключение; 
КонецПопытки;
Excuse me, у вас техническая ошибка здесь:

«Кукла есть ОДЕВАЕМАЯ девочкой».
«A doll is dressed up by the girl»

На самом деле это переводится как «Кукла есть ОДЕТА девочкой».

А если вам нужно ОДЕВАЕМАЯ тогда «A doll is being dressed up by the girl»
Тема интересная до чрезвычайности.
Тем более неприятно, какое огромное количество индивидуумов считает своим долгом высказать свои соображения, не имея даже отдалённого представления о предмете.

Information

Rating
Does not participate
Registered
Activity