Вызов второго метода внутри скобок begin,enshure? Не элегантно.
В С++ есть удачный механизм для этого: создание объектов на стеке. Они разрушаются гарантированно и отпускают объекты. Особенно это приятно в случае с мьютексами.

В руби для этого есть блоки.

class Processor def hard_action f = IO.open(“journal.log”) begin yield f if block_given? ensure f.close end end end Processor.new.hard_action do |file| file.write “My journal record” end

Все. Не нужно думать про отпускание ресурса. Именно так работает File.open.

Соответственно декораторы могут быть вложенными. User хранится в одной базе, Account в другой базе. Между ними транзакции невозможны, будем иммитировать.

User.transaction(mary) do Account.transaction(mary_account) do if mary.allowed?(action) mary_account.amount -= action.price end end end

Sidebar