Маленькое введение:
Класс содержит поля и методы (позвольте мне пропустить свойства на этот раз).
Поля представляют состояние класса.
Методы описывают поведение класса.
В хорошо продуманном классе метод не изменит состояние класса, если он выдает исключение, правильно? (Другими словами, что бы ни случилось, состояние класса не должно быть повреждено)
Вопрос:
Есть ли структура, шаблон проектирования, лучшая практика или язык программирования для вызова последовательности методов в транзакционном стиле, так что состояние класса не изменяется (в случае исключения) или все не удается?
например:.
// 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
's, no while
' s, никаких побочных эффектов, но я надеюсь, что идея понятна.