我正在使用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);
答案 0 :(得分:0)
如果你的服务层方法所做的就是将调用委托给底层存储库方法,那么是的,删除这个服务层是完全没问题的,因为它没有附加值,直接使用你控制器中的存储库。
我在哪里进行缓存和记录?服务层或在 库?假设GetAll方法带回了很多 需要缓存的记录。我会将其缓存在存储库中吗? 或者我需要一个服务层吗?
缓存应该在数据层完成。根据您的数据访问方式,NHibernate等ORM已包含二级缓存,因此您只需激活它即可。
就日志记录而言,您可以在应用程序的绝对每个层中执行此操作,这可能需要记录某些内容。