Вы должны отделить код для поиска вашего заказа от кода, который строит SQL. SQL должен быть встроен в производную (или Strategy производная) класса OrderSearch
. После того как вы сделали это разделение, на самом деле не имеет значения , когда вы создаете SQL.
Чтобы сделать это немного проще. Если у вас есть класс с именем OrderSearch
, в котором есть набор методов для критериев поиска, вы хотите иметь подкласс с именем OrderSearchSQLBuilder
. Обратите внимание, что подкласс зависит от базового класса, и что базовый класс не зависит от подкласса. Это очень важно. Эта независимость позволяет не учитывать, встроен ли SQL в методы установки или в метод поиска. См. Принцип обращения зависимостей (DIP) .
Если у вас есть такой вид разделения, вы можете заменить производную другими стратегиями. Например, если вы хотите протестировать свое приложение, не подключая его к базе данных SQL, вы можете создать фиктивную оперативную базу данных и создать производную от OrderSearch
, которая работает с этой фиктивной базой данных. Остальная часть приложения будет в блаженном неведении, и тогда ваши тесты будут независимы от ужасов соединений с базой данных, ранее существующих данных и т. Д.