在储存库中访问UnitOfWork是一个糟糕的设计吗?

本文关键字:一个 访问 储存库 UnitOfWork | 更新日期: 2023-09-27 18:11:47

Background: Entity framework4.1 and MVC4

我的设置有模型实体,然后是一个通用存储库,然后是继承自通用存储库的UserRepository, ProductRepository等模型特定存储库。

然后我有一个服务层,它使用这些存储库以及任何业务逻辑,并且UnitOfWork对象可以在这里调用Commit。

工作单元模式,我的问题是:

让存储库层访问UnitOfWork对象是糟糕的设计吗?

对我来说,这似乎是一个"泄漏",因为现在事情可能会在你甚至没有意识到的情况下提交。

是正确的吗?

public class ProductService
{

   public void SaveProduct(Product product)
   {
      try
      {
        productRepository.Save(product);
        statsRepository.Update(product);
        this.UnitOfWork.Commit();
      } catch(..) 
      {
            //
      }
      finally()
      {
        //
      }

   }
}

现在,如果其中任何一个调用失败,commit将不会被调用。

但是,如果在abrepository层,您可以访问UofW对象并调用commit,那么它的行为将不一致。

在储存库中访问UnitOfWork是一个糟糕的设计吗?

我认为这是实现repository和UnitofWork的正确方式

http://code.cmsstores.com/implementing-unit-of-work-pattern-dot-net/

我认为存储库不应该访问u-o-w,正如Matthew已经评论的那样。你的问题基本上是不言自明的。

Re: 现在,如果其中任何一个调用失败,commit将不会被调用。 -

总的来说,这是好的,对吧?您不希望部分地提交更改。