我正在构建一个对象来搜索我的数据库中的订单。用户可以设置许多可能的参数,并且他们可以为每次搜索设置任意数量的参数。我创建了 setter 方法来收集搜索所需的所有参数。
我的问题是这个。什么是“最佳实践”
WHERE
方法时构建 doSearch
子句 WHERE
子句 我想了解任何建议背后的原因。
请注意,每次搜索都会初始化对象,因此我不必担心使用不同参数进行第二次搜索。
最佳答案
您应该将用于订单搜索的代码与构建 SQL 的代码分开。 SQL 应该构建在 OrderSearch
类的派生类(或 Strategy 派生类)中。一旦进行了这种分离,何时构建 SQL 就无关紧要了。
为了使这更简单一些。给定一个名为 OrderSearch
的类,它具有一组用于搜索条件的 setter 方法,您希望有一个名为 OrderSearchSQLBuilder
的子类。请注意,子类依赖于基类,而基类独立于子类。这个非常重要。这种独立性允许您忽略 SQL 是在 setter 方法中还是在 search 方法中构建的。见 The Dependency Inversion Principle (DIP) 。
一旦你有了这种分离,你就可以用其他策略代替衍生。例如,如果您想在不将其连接到 SQL 数据库的情况下测试您的应用程序,您可以创建一个虚拟的 in-ram 数据库并创建处理该虚拟数据库的 OrderSearch
的派生类。应用程序的其余部分将完全不知道,然后您的测试将独立于数据库连接、预先存在的数据等的恐怖。
关于mysql - 单个参数或 Build Where 子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/617759/