Вызов второго метода внутри скобок 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 в другой базе. Между ними транзакции невозможны, будем иммитировать.