Объектно-ориентированное программирование и транзакции
Небольшое вступление:
Класс содержит поля и методы (на этот раз я пропущу свойства).
Поля представляют собойгосударство класса.
Методы описанияповедение класса.
В хорошо разработанном классе метод выигрализменить классs состояние, если оно выдает исключение, верно? (Другими словами, что бы ни случилось, классГосударство не должнобыть испорченным)
Вопрос:
Есть ли фреймворк, шаблон проектирования, передовой опыт или язык программирования для вызова последовательности методов в транзакционном стиле, чтобы любой класссостояние неизменить (в случае исключения), или все успешно?
Например.:
// the class foo is now in the state S1
foo.MoveToState2();
// it is now (supposed to be) in the state S2
foo.MoveToFinalState();
// it is now (supposed to be) in the state, namely, S3
Конечно, исключение может возникнуть как вMoveToState2()
а такжеMoveToFinalState()
, Но из этого блока кода я хочу классfoo
быть в состоянии S1 или S3.
Это простой сценарий с участием одного класса, нетif
с нетwhile
s, никаких побочных эффектов, но я надеюсь, что идея ясна.