我正在使用ASP.NET MVC 3
。我得到我的观点的数据按以下顺序:是否在控制器,服务或存储库层中进行数据过滤?
Controller -> Service Layer -> Repository
在我的仓库我有一个GETALL方法带回的所有记录特定对象,如类别。
所以,如果我需要的所有类别的名单,然后在我的控制器我会是这样的:
IEnumerable<Category> categories = categoryService.GetAll();
在服务层我想有这样的事情:
public IEnumerable<Category> GetAll()
{
return categoryRepository.GetAll();
}
现在这是我需要知道的,我在哪里开始过滤数据?它可以在这三个层中的任何一层中的任何位置完成,还是只能位于存储库层?可以说我需要所有父类别。我的控制器,服务层或存储库层中是否有.GetAll.Where(x => x.ParentCategoryId == null);
?
我必须像这样在我的控制器:
IEnumerable<Category> categories = categoryService.GetParentCategories();
而在我的服务层,我可以有:
public IEnumerable<Category> GetParentCategories()
{
return categoryRepository.GetAll.Where(x => x.ParentCategoryId == null);
}
抑或我的服务层必须是这样的:
public IEnumerable<Category> GetParentCategories()
{
return categoryRepository.GetParentCategories();
}
然后在我的存储库层像这样:
public IEnumerable<Category> GetParentCategories()
{
return GetAll()
.Where(x => x.ParentCategoryId == null);
}
请有人帮助澄清我有这种困惑。可能有不同的情况。我可能会带回所有具有活动状态的类别。我可能会带回处于非活动状态的类别。那我是否需要每个方法?
GetAll只是一个示例方法,主要关注于过滤部分。然后我是否在储存库中为每个用途创建一个方法?但是.Where(...)的工作方式不像使用where子句的sql select? –
只有当你使用LINQ to实体时,你需要一个'IQueryable'。 –
是的。我有一个方法获取 tat在存储库中是IQueryable,因此存储库可以处理所有条件。一个GetALlUsers()方法让我开火。像地狱一样效率低下。吸引100.9000用户获得名称 - 不。 –
TomTom