0

我正在使用ASP.NET MVC 3.

我仍然对存储库层中会发生多少感到困惑。我一直认为它必须只做需要做的事情,仅此而已。

我一直在使用一个服务层,该服务层又调用我的存储库层。我总是有一个对应的服务层用于存储库层,以及一个对应的服务层方法用于存储库方法,即使它只是为了获取项目列表。所以我会有以下服务层:

public class UnitService : IUnitService
{
     private readonly IUnitRepository unitRepository;

     public UnitService(IUnitRepository unitRepository)
     {
          this.unitRepository = unitRepository;
     }

     public IEnumerable<Unit> GetAll()
     {
          return unitRepository.GetAll();
     }
}

这就是我的存储库层的样子:

public class UnitRepository : IUnitRepository
{
     // Partial code

     public IEnumerable<Unit> GetAll()
     {
          return DbContext.Units
               .Include("Department")
               .OrderBy(x => x.Name);
     }
}

如果不是真的需要,我正在尝试减少我的服务层类。那么只从我的控制器而不是服务层调用存储库可以吗?我是否按照自己的方式做真的很重要吗?我的意思是它仍然带回了我所有的数据。

我将在哪里进行缓存和日志记录?服务层还是在存储库中?假设 GetAll 方法带回了许多需要缓存的记录。我会将其缓存在存储库中还是需要一个服务层?

日志记录也是如此。我会在哪里记录以下内容:

Log.Info("Adding category: {0}, {1}", entity.Id, entity.Name);
// adding code
Log.Info("Category added: {0}, {1}", entity.Id, entity.Name);
4

1 回答 1

0

如果您的服务层方法所做的只是将调用委托给底层存储库方法,那么可以,删除此服务层是完全可以的,因为它没有附加值并直接使用控制器中的存储库。

我将在哪里进行缓存和日志记录?服务层还是在存储库中?假设 GetAll 方法带回了许多需要缓存的记录。我会将其缓存在存储库中还是需要一个服务层?

缓存应该在数据层完成。根据您进行数据访问的方式,NHibernate 等 ORM 已经包含二级缓存,因此您所要做的就是激活它。

就日志记录而言,您可以在应用程序的每个可能需要记录某些内容的层中执行此操作。

于 2012-07-13T06:53:56.107 回答