单个参数或构建Where子句

Yis*_*oel 3 mysql oop coldfusion

我正在构建一个对象来搜索我的数据库中的订单.用户可以设置许多可能的参数,并且可以设置每次搜索所需的数量.我已经创建了setter方法来收集搜索所需的所有参数.

我的问题是这个.什么是"最佳实践"

  1. 存储参数,并在调用方法WHERE时构建子句doSearch
  2. WHERE子句设置为参数已设置

我想了解任何建议背后的原因.

请注意,对象是针对每次搜索而设置的,因此我不必担心使用不同参数进行第二次搜索.

小智 13

您应该将订单搜索的代码与构建SQL的代码分开.SQL应该在类的派生(或策略派生)中构建OrderSearch.一旦完成了这种分离,构建SQL 并不重要.

为了使这更加简单.给定一个名为OrderSearch具有搜索条件的一组setter方法的类,您希望有一个名为的子类OrderSearchSQLBuilder.请注意,子类依赖于基类,并且基类独立于子类.这是非常重要的.这种独立性允许您忽略SQL是在setter方法中还是在搜索方法中构建的.请参阅依赖性倒置原则(DIP).

一旦你有这种分离,你可以用其他策略替换衍生物.例如,如果您想在不将其连接到SQL数据库的情况下测试应用程序,则可以创建一个虚拟的in-ram数据库并创建OrderSearch处理该虚拟数据库的衍生产品.应用程序的其余部分将无法意识到,您的测试将独立于数据库连接,预先存在的数据等的恐怖.