如何实现MVC中的工作单元:责任

时间:2010-02-10 16:24:30

标签: asp.net-mvc design-patterns architecture unit-of-work

谁有责任


谁有责任在MVC架构中开始和完成工作单元?

4 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

正如zihotki所说,如果你把这个责任交给控制器,你就会违反SRP。这是一个面向数据操作的模式,因此不应该成为控制器关注的问题......这将导致两个违规:一个用于SRP,另一个用于SoC原则。

至于谁有责任,这是你的架构所定义的东西。 StartRequest / EndRequest建议看起来足够扎实。