7

谁有责任


谁负责在 MVC 架构中启动和完成工作单元?

4

4 回答 4

10

这不是控制器的责任,它违反了SRP。控制器甚至根本不应该知道 UoW。在 Web 中,通常使用对服务器的每个请求一个 UoW。在这种情况下,UoW 应该在请求结束时处理,并在请求开始之后的某个地方开始(理想情况下,UoW 的开始应该是惰性的)。执行此操作的最佳位置是使用 Application_EndRequest 和 Application_BeginRequest 处理程序的 Global.asax(或您的 HttpApplication 类)。
这可以通过 IOC 框架(我最喜欢的是 Windsor)轻松实现,有关实现细节,请参阅此问题。

于 2010-02-10T17:34:42.627 回答
5

控制器。这将获取上下文,因此您可以开始和完成工作单元。例如,每个请求的 nHibernate 会话需要您知道请求何时开始和完成,因此您需要上下文来为您提供请求。

于 2010-02-10T16:28:40.060 回答
3

我是松耦合架构的信徒。我的控制器对存储库、上下文或工作单元一无所知。我创建了控制器调用的服务层(不确定这是正确的术语)。然后,此服务与存储库 (dll) 一起使用以保存所有数据。

于 2011-04-01T15:44:57.967 回答
2

正如 zihotki 所说,如果您将此责任交给控制器,您将违反 SRP。这是一种面向数据操作的模式,因此不应该成为控制器的关注点……这将导致两种违规行为:一种是针对 SRP,另一种是针对 SoC 原则。

至于谁负责,那是由你的架构来定义的。StartRequest/EndRequest 建议似乎足够可靠。

于 2010-02-10T19:11:07.140 回答