Разработка шаблона для фильтрации данных в соответствии с определенными правилами - PullRequest
0 голосов
/ 03 июля 2018

Мне нужно отфильтровать данные на основе определенных правил. Например, у меня есть список записей, а с другой стороны, у меня есть набор правил. Каждое правило будет отфильтровывать этот список. Я также поддерживаю файл конфигурации для этих правил. Эти правила могут быть включены / выключены через файл конфигурации.

Например, рассмотрим мой файл конфигурации ..

[
  {
    "rule": "rule-1",
    "class": "org.company.RuleOneFilter.class",
    "isEnabled": true
  },
  {
    "rule": "rule-2",
    "class": "org.company.RuleTwoFilter.class",
    "isEnabled": false
  },
  {
    "rule": "rule-3",
    "class": "org.company.RuleThreeFilter.class",
    "isEnabled": true
  }
]

Используя этот файл, правила могут быть легко подключены или отключены. Я проверил спецификацию Chain Of Responsibility , но все еще не понял, пойти на это или нет! Может кто-нибудь предложить мне подходящий шаблон проектирования для реализации этого? Или есть ли какие-либо рамки для удовлетворения этой потребности?

1 Ответ

0 голосов
/ 03 июля 2018

Если правила накапливаются, цепочка ответственности кажется чрезмерной.
Вам не нужно связывать правила в цепочке, и у вас нет понятия цепочка / преемник / и так далее.
Что вам нужно, это просто: шаблон итератора. Вы выполняете итерацию для каждого элемента списка правил, и в соответствии с их состоянием (включено или нет) правило будет выполнено или нет.
Конечно, каждое конкретное правило должно быть производным от базового класса, которым нужно манипулировать единообразным образом.

Теперь, если правила не накапливаются, а являются исключительными в отношении их исполнения и вам необходимо установить определенный порядок между правилами-кандидатами, цепочка ответственности имеет смысл.

...