我有一个具有 3 层UI、服务层和存储库的 ASP.NET 应用程序。
我必须在数据库中的产品上实现搜索功能。
ProductRepository
是我的存储库类,从数据库中获取所有产品的方法的签名是:
IQueryable<Product> GetAllProducts();
因此,从我的服务层我使用:
IProductRepository _ProductRepository = new ProductRepository();
IQueryable<Product> products = _ProductRepository.GetAllProducts();
如果我想过滤IQueryable<Product> products
,例如使用价格 > 100的产品或仅使用color = "yellow"的产品。
所以我想知道,而不是创建方法,ProductRepository
例如:
IQueryable<Product> GetAllProductsByColor(int colorId)
我想知道在我的服务层中创建一组接受IQueryable<Product>
作为参数并直接在那里执行过滤的方法是否是一种好习惯:
IQueryable<Product> FilterProducts(IQueryable<Product> products, Dictionary<string, object> filters)
其中用(propertyName, value)Dictionary<string, string>
表示一个集合。
此解决方案的优点是,如果我必须应用多个过滤器,我只需通过IQueryable<Product>
已过滤的过滤器,而不是每次都采用过滤后的产品集之间的交集。
这是一个好习惯(只要我保持上下文打开)还是多层架构模式不“允许”?