Я видел много реализаций в сети людей, управляющих своими сеансами и транзакциями NHibernate в HttpModule.
Модуль Http:
- создает сеанс в начале запроса
- упаковывает весь запрос в транзакцию
- фиксирует транзакцию в конце запроса
Если люди используют эту стратегию, как они справляются со следующим сценарием:
- запрос приходит
- получить объект из базы данных
- объект обновления
- объект не проходит проверку
- изменения в объекте все еще сохраняются, потому что транзакция фиксируется в HttpModule.
Похоже, что в описанном выше сценарии нет хорошего способа откатить транзакцию. Единственный план, который я могу придумать, это:
- написать мою проверку таким образом, чтобы она гарантированно прошла успешно перед обновлением моего объекта домена (исключает мою проверку из моей модели домена).
- управляйте моей транзакцией ближе к моей бизнес-логике и отбросьте идею прозрачного выполнения в HttpModule. (Я видел довольно много сообщений, рекомендую это)
Учитывая, что многие люди используют подход HttpModule, я надеюсь, что есть третий способ управления этим сценарием, о котором я даже не думал?