是否有关于如何使用复杂搜索逻辑处理DAL方法的最佳实践?我在谈论像
这样的业务需求“列出公司活跃或处于睡眠状态的客户,上一季度订单超过1000美元,客户不得删除,公司必须在伦敦或纽约和巴黎设有办事处......”
这些要求很快使您的CustomerDAL.GetCustomers(...)拥有超过9000个参数,更不用说它会一直变化,如果您有大量的图层,接口,Web服务等,这可能会很痛苦。
除了创建在调用方法本身之前创建和设置的CustomerSearchParameters结构之外,还有其他方法可以清理这样的方法吗?
答案 0 :(得分:1)
你可以在调用GetCustomers()的方法中构建一个表达式,然后将该表达式传递给查询,例如。
GetCustomer(string where)
然而,这使得where子句难以验证。更好的方法可能是使用表达式结构来捕获约束,这也可以在执行查询之前更容易验证表达式:
class Expression {
string PropertyName
object value
}
GetCustome(Expression[] constraints)
答案 1 :(得分:1)
也许你应该看一下JPA Criteria API。即使您没有使用JPA这样的模型,您可以动态地向您的查询添加Criteria,也可以满足您的需求。我建议您确保创建透明API(您的DAL或DAO方法,例如不应直接依赖JPA Criteria API)。