在服务和存储库层中可以进行多少活动?

时间:2012-07-13 06:50:12

标签: c# asp.net asp.net-mvc asp.net-mvc-3 entity-framework

我正在使用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);

1 个答案:

答案 0 :(得分:0)

如果你的服务层方法所做的就是将调用委托给底层存储库方法,那么是的,删除这个服务层是完全没问题的,因为它没有附加值,直接使用你控制器中的存储库。

  

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

缓存应该在数据层完成。根据您的数据访问方式,NHibernate等ORM已包含二级缓存,因此您只需激活它即可。

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