asp.net mvc服务层和工作单元

时间:2010-11-09 00:52:52

标签: asp.net-mvc

  

可能重复:
  How to implement Unit of work in MVC: Responsibility

您好。我正在使用以下架构开发ASP.NET MVC Web应用程序: UI - >控制器 - >服务层 - >库。这里的问题是在哪里公开工作单元模式。比如我有:

public class SomeController
{
    public ActionResult AnAction()
    {
        using(var unitOfWork = UnitOfWorkManager.Create())
        {
            try
            {
                this.ServiceA.Foo();
                this.ServiceB.Foo();

                unitOfWork.Commit();
            }
            catch(Exception ex)
            {
                unitOfWork.Rollback();
            }         
        }
    }
}

控制器是否可以了解工作单元?如果我们有多次调用不同的服务但​​是在同一个操作方法中并且我们需要事务性行为会怎样?

1 个答案:

答案 0 :(得分:4)

我们构建了一个具有相同架构的应用程序,我们的观点是UOW类仅在服务中使用。原因:

  1. 我们认为操作应该只有视图逻辑,因此如果可能的话,不应该知道与使用多个存储库调用相关的业务规则
  2. 业务逻辑规则应该(尽可能)在服务中。我们的服务使用UOW类和短期上下文对象来使用无或多个存储库。
  3. 行动

    public ActionResult List()
    {
        var things = ThingService.GetAll();            
        return View(things);
    }
    

    服务

    public IEnumerable<Thing> GetAll()
    {
        using (ObjectContext context = new Container(ConnectionString))
        {
            var work = new UnitOfWork(context);
            return work.Things.GetAll());
        }
    }
    

    希望这有帮助