Какие шаблоны / шаблоны лучше всего подходят для разработки механизма правил / решений

Я работаю над механизмом принятия решений / механизмом оценки правил. Например:

Исходные данные: Клиент и все правонарушения, совершенные клиентом.

Результат: Последствия правонарушений.

Примерный случай:

Сырьё: Заказчик (Джонни Чимпо, 999-00-1111), правонарушения (разбитое окно, ударил босса, ударил лидера команды ногой в пах).

Выход: Получает розовую накладку.

Итак, фрагмент кода, который я хочу написать, оценивает различные нарушения на основе правил для каждого нарушения и комбинированного нарушения. Текущий код - это просто лабиринт операторов if и else. Я уверен, что такие бизнес-проблемы - обычное дело. Какой шаблон дизайна / предприятия обычно используется для решения такой проблемы?

Это шаблон спецификации? Я хочу, чтобы код был открытым для расширения, чистым и гибким.


person Perpetualcoder    schedule 24.01.2010    source источник
comment
Вы хотите написать? Вы можете взглянуть на Джесс jessrules.com   -  person Joe    schedule 24.01.2010


Ответы (6)


В основном бизнес-правила выглядят так

forall rules:
  if <condition> then doAction();

Что касается классификации всех правонарушений по степени тяжести с использованием баллов, возможно, дополнительного бонуса для частых «злодеев», некоторые правонарушения могут быть отсрочены по времени и все, что потребуется.

Тогда черновой набросок алгоритма может быть:

  • Сумма всех оценок клиента (взвешенная)
  • сравнить с максимумом

Это было бы просто, используя структуры данных вместо многих (возможно, глубоко вложенных) if..then..else вещей.

person stacker    schedule 24.01.2010
comment
текущий код, который у нас есть, представляет собой лабиринт циклов if-else - person Perpetualcoder; 25.01.2010

Я могу предложить вам инструмент, который мы использовали для решения подобной проблемы.

Взгляните на JBoss Drools: http://www.jboss.org/drools/

Это BRMS: система управления бизнес-правилами

Это вводное видео: http://www.jboss.com/products/platforms/brms/

person Andrea Zilio    schedule 24.01.2010
comment
Я пытаюсь развить платформу .net +1 за упоминание отличного продукта - person Perpetualcoder; 25.01.2010

Я не уверен, что какой-либо из приведенных выше ответов был настолько полезным.

Я написал аналогичные компоненты, используя деревья выражений. Вы можете создавать лямбда-выражения, представляющие предикаты, компилировать и выполнять их динамически, а затем запускать какое-либо действие в ответ. Этот подход мощный, гибкий и устраняет весь ужас if / else (который определенно не подходит).

Однако на самом деле вы говорите о логическом программировании. Существует множество реализаций Prolog поверх .NET. Prolog - это язык, основанный на логике, который часто используется для приложений ИИ, который начинает становиться очень мощным, как только вы разберетесь с его парадигмой.

Взгляните на некоторые из них ..

person flesh    schedule 08.02.2010
comment
это что-то действительно интересное. Я тоже не фанат механизмов бизнес-правил - person Perpetualcoder; 08.02.2010
comment
но ..:) ... Я тоже не фанат Пролога ... Мне это просто потрясающе :) - person Perpetualcoder; 08.02.2010

Вы можете попробовать что-то похожее на этот механизм правил, основанный на событиях

person Nick Miller    schedule 06.03.2010

Я думаю, что в вашем случае подойдет любой механизм правил, основанный на алгоритме RETE. Можете попробовать пускать слюни.

person Mervin Yan    schedule 17.05.2010

Я думаю, вы пытаетесь разработать экспертную систему. Вы можете проверить термин, а затем выбрать соответствующие языки программирования в качестве пролога и т. Д.

person Aykut Akıncı    schedule 24.01.2010
comment
Я не пытаюсь построить экспертную систему. - person Perpetualcoder; 25.01.2010
comment
На самом деле @Perpetualcoder, вы перечислили именно экспертную систему. - person Nick Larsen; 29.01.2010
comment
Разве экспертная система не является одновременно обучающей машиной для выполнения определенной работы? - person Perpetualcoder; 29.01.2010