【发布时间】:2012-05-14 03:20:09
【问题描述】:
我有一个具有 3 层 UI、Service Layer 和 Repository 的 ASP.NET 应用程序。
我必须对数据库中的产品实施搜索功能。
ProductRepository 是我的 repository 类,从数据库中获取所有 products 的方法的签名是:
IQueryable<Product> GetAllProducts();
因此从我的服务层我使用:
IProductRepository _ProductRepository = new ProductRepository();
IQueryable<Product> products = _ProductRepository.GetAllProducts();
如果我想过滤IQueryable<Product> products,例如选择那些 price > 100 的产品或只选择 color = "yellow" 的产品。
所以我想知道,而不是在ProductRepository 中创建方法,例如:
IQueryable<Product> GetAllProductsByColor(int colorId)
我想知道在我的服务层中创建一组接受IQueryable<Product>作为参数并直接在那里执行过滤的方法是否是一个好习惯:
IQueryable<Product> FilterProducts(IQueryable<Product> products, Dictionary<string, object> filters)
其中Dictionary<string, string> 表示具有 (propertyName, value) 的集合。
此解决方案的优点是,如果我必须应用多个过滤器,我只需传递已过滤的 IQueryable<Product>,而不是每次都获取过滤后的产品集之间的交集。
这是一种好习惯(只要我保持上下文打开)还是多层架构模式不“允许”?
【问题讨论】:
标签: asp.net parameters filter iqueryable service-layer