【发布时间】:2008-12-25 10:56:59
【问题描述】:
清理一些事务逻辑并想知道其他人是如何处理它的。
Ayende 的建议似乎是在服务边界处理事务。这是一个 ASP.NET Web 应用程序,因此它没有明确的服务边界,至少现在没有。
人们做什么?
- 在 HttpModule 中为每个请求创建单个事务并在 EndRequest 上处理提交,在错误时回滚?
- 在应用程序的实际“服务”中创建事务并在多个地方处理?
- 还有别的吗?
【问题讨论】:
清理一些事务逻辑并想知道其他人是如何处理它的。
Ayende 的建议似乎是在服务边界处理事务。这是一个 ASP.NET Web 应用程序,因此它没有明确的服务边界,至少现在没有。
人们做什么?
【问题讨论】:
您可以为您的服务层使用 IoC 容器,该容器可以管理事务和 Nibenrate 会话。
您的 WebApp 控制器 => 调用 (A) 服务层 => 调用 (B) 一个或多个 DAO 方法/操作。
像 Spring.NET 这样的 IoC 容器将管理 TX 范围,例如在 (A) 中,并将在 (B) 中为您的 DAO 提供一个 Session。提交(或回滚)将在服务层调用结束时处理。
【讨论】:
大多数人使用第一个要点中所述的按请求会话策略。但是,我不认为事务需要在 EndRequest 上提交。在许多网页中,根据用户操作(例如单击提交)提交事务并让 EndRequest 处理 ISession 的处理会更容易。
据我所知,没有必要创建 HttpModule,因为可以在 global.asax 中创建相同的功能:http://forum.hibernate.org/viewtopic.php?t=993041。
【讨论】: