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

C# 在服务和存储库层中可以进行多少活动?,c#,asp.net,asp.net-mvc,asp.net-mvc-3,entity-framework,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,我使用的是ASP.netmvc3 我仍然不清楚在存储库层中会发生多少事情。我一直认为,它必须只做需要做的事情,什么也不做 我一直使用一个服务层,该服务层反过来调用我的存储库层。对于存储库层,我总是有一个对应的服务层,对于存储库方法,我总是有一个对应的服务层方法,即使它只是为了得到一个项目列表。因此,我将拥有以下服务层: public class UnitService : IUnitService { private readonly IUnitRepository unitRepos

我使用的是
ASP.netmvc3

我仍然不清楚在存储库层中会发生多少事情。我一直认为,它必须只做需要做的事情,什么也不做

我一直使用一个服务层,该服务层反过来调用我的存储库层。对于存储库层,我总是有一个对应的服务层,对于存储库方法,我总是有一个对应的服务层方法,即使它只是为了得到一个项目列表。因此,我将拥有以下服务层:

public class UnitService : IUnitService
{
     private readonly IUnitRepository unitRepository;

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

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

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

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

缓存应该在数据层完成。根据您访问数据的方式,NHibernate之类的ORM已经包含了二级缓存,所以您所要做的就是激活它


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

缓存DAL,日志记录=>您需要记录某些内容的任何地方。可以是控制器、模型、服务层、DAL……如果我从控制器->服务层->存储库->使用上下文工作,我的数据层是什么。因此,我假设在存储库层中?是的,您的数据层就是存储库。“删除此服务层”同意,但有一个微小的区别:我会放弃存储库并保留服务,因为事实上,EF已经提供了存储库(DBSET)。最后是相同的层次,但不同的名称。
public class UnitRepository : IUnitRepository
{
     // Partial code

     public IEnumerable<Unit> GetAll()
     {
          return DbContext.Units
               .Include("Department")
               .OrderBy(x => x.Name);
     }
}
Log.Info("Adding category: {0}, {1}", entity.Id, entity.Name);
// adding code
Log.Info("Category added: {0}, {1}", entity.Id, entity.Name);