从控制器获取非hibernate会话(Session Per Request)净MVC



我看过很多关于如何在Asp中设置每个请求的会话的帖子。通过使用ActionFilter或通过DI包将会话注入控制器。我想知道的是,仅仅做一个像

这样的扩展方法会是个坏主意/模式吗?
public static ISession GetNHibernateSession(this Controller controller)
 {
   return SessionFactory.OpenSession();
 }

以便在需要时实例化会话,例如:

public ActionResult DoSomething()
    {
      using(  var session = this.GetNHibernateSession())
        {
           // Do something with the session
        }
    }

这可能是一个好主意/坏主意的原因将非常感谢

好:

  • 很简单
  • 它只是工作

坏:

  • 你正在做会话管理,即使它只是三行,在你的代码
  • 使用扩展方法,您不能替换用于测试
  • 的行为

简而言之,对于小型的RAD和概念验证项目,您的想法将工作得很好。对于更复杂的开发,最好从控制器中提取会话管理,至少将其移动到基类中。

最新更新