Параметризация сложных методов поиска - PullRequest
1 голос
/ 18 февраля 2010

Есть ли лучший способ обработки методов DAL со сложной логикой поиска?Я говорю о бизнес-требованиях, таких как

. Перечислите клиентов, компании которых активны или находятся в спящем режиме, имеют более 1000 $ заказов в последнем квартале, клиент не должен быть удален, компания должна иметь офис вЛондон или Нью-Йорк и Париж ... "

Эти требования быстро делают ваш CustomerDAL.GetCustomers (...) более 9000 параметров, не говоря уже о том, что он постоянно меняется, что может быть неприятно, если выимеет много слоев, интерфейсов, веб-сервисов и т. д.

Есть ли другие хорошие способы очистки подобных методов, кроме создания структуры CustomerSearchParameters, которую вы создаете и настраиваете перед вызовом самого метода?

Ответы [ 2 ]

1 голос
/ 18 февраля 2010

Может быть, вам стоит взглянуть на JPA Criteria API . Даже если вы не используете JPA, модель, подобная этой, где вы можете динамически добавлять критерии в запрос, может сделать то, что вам нужно. Я бы рекомендовал убедиться, что вы создаете прозрачный API (ваши методы DAL или DAO, например, не должны напрямую полагаться на API критериев JPA).

1 голос
/ 18 февраля 2010

Хорошо, вы можете построить выражение внутри метода, вызывающего GetCustomers (), а затем передать это выражение в запрос, например,

GetCustomer(string where)

Однако это затрудняет проверку предложения where. Лучшим подходом может быть использование структуры выражения для захвата ограничений, это также упростит проверку выражения перед выполнением запроса:

class Expression {
  string PropertyName
  object value
}

GetCustome(Expression[] constraints)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...