【发布时间】:2009-08-10 13:44:02
【问题描述】:
这可能是一个已经存在 20 年的问题,但我还是要问。我有一个有多个搜索选项的屏幕。有的可以组合。有些是独家的。
例如:
按名字和姓氏搜索
或
按年龄搜索
处理此问题的最佳方法是什么?我是否在应用程序中处理这个问题,或者调用许多函数中的 1 个,或者使用一大堆 if/else 调用 1 个函数。做一系列 if/else 似乎已经过时了。没有更有效的方法吗?
【问题讨论】:
这可能是一个已经存在 20 年的问题,但我还是要问。我有一个有多个搜索选项的屏幕。有的可以组合。有些是独家的。
例如:
按名字和姓氏搜索
或
按年龄搜索
处理此问题的最佳方法是什么?我是否在应用程序中处理这个问题,或者调用许多函数中的 1 个,或者使用一大堆 if/else 调用 1 个函数。做一系列 if/else 似乎已经过时了。没有更有效的方法吗?
【问题讨论】:
我建议使用构建器将各种谓词收集到一个对象中,然后将该对象传递给生成相关查询的函数/方法。
SQLORM Java library 使用这种方法以面向对象的方式构建 SQL 查询。 This page 很好地讨论了使用带有大量 if-else 的方法与构建器方法构建查询字符串的优缺点。
【讨论】:
我会在前端验证哪些字段可以一起完成。
对于存储过程,主要目标是没有带有连接的sql。
在存储过程中,我倾向于使用一串 isnull 语句来使用参数或如果参数为空则使用字段值。
正如您所说,这不是一个新技巧,但它可以工作并且比每次执行生成新的 sql 快得多。它还具有易于预测的执行计划。
【讨论】: