Хорошие ссылки / советы по проектированию систем правил? - PullRequest
6 голосов
/ 16 сентября 2008

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

  1. ремонтопригоден
  2. правильно сочетает выразительность с простотой использования
  3. легко расширяется (если / когда я ошибаюсь (2)).

Я думаю, что системы правил / DSL чрезвычайно ценны, но я не чувствую себя комфортно с их способностью правильно их проектировать.

Какие рекомендации / советы вы можете предложить, чтобы облегчить эту задачу?
Из-за характера проблем, с которыми я сталкиваюсь, существующие языки обычно не применимы. (Например, вы бы не требовали, чтобы обычные пользователи компьютера изучали python для написания фильтра электронной почты.) Аналогично, правило languages ​​, такое как JESS , являются лишь частичным решением, поскольку некоторый (более простой) пользовательский интерфейс должен быть построен поверх языка правил, чтобы его могли использовать непрограммисты. Этот интерфейс неизменно включает в себя удаление некоторых функций или усложнение их использования, и этот процесс создает те же проблемы, что и описанные выше.

Редактировать: Чтобы уточнить, вопрос о проектировании механизма правил, я не ищу предварительно созданный механизм правил. Если вы предлагаете механизм правил, объясните, как он решает вопрос о принятии правильных проектных решений.

Ответы [ 5 ]

2 голосов
/ 30 сентября 2008

У нас была собственная демонстрация этого инструмента его производителем: http://www.rulearts.com/rulexpress.php

Как компания, мы имеем большой опыт работы с механизмами правил (например, Cleverpath Aion), но в основном инструментами, ориентированными на разработчиков. Этот инструмент (rulexpress) очень ориентирован на деловых людей. Это не двигатель правил. Но он может выводить все данные в xml (то есть, в основном, в любом формате, который вам нравится), и это то, что мы бы затем рассмотрели как ввод для реального механизма правил, например, Windows Workflow Foundation (не один из больших / лучших механизмов правил, но все же).

Инструмент сам по себе выглядел довольно неплохо, некоторые вещи, которые я никогда не видел ни в одном инструменте, ориентированном на разработчика.

Существуют также некоторые инструменты для управления правилами, построенные вокруг WF, если вы предпочитаете этот механизм правил, посмотрите InRule.


Отредактировано после уточнения исходного вопроса: Хотя я давно этим занимался (немного говорю на языке javacc), я бы посчитал это сейчас плохим вложением времени. Мой комментарий выше в том же духе: возьмите простой движок правил, простой (коммерческий) пользовательский интерфейс, который облегчает поддержку бизнес-пользователям, и тратите время только на их объединение.

1 голос
/ 16 сентября 2008

Нам повезло с этим: http://msdn.microsoft.com/en-us/library/bb472424.aspx

0 голосов
/ 30 сентября 2008

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

Таким образом, либо система должна защищать от такого поведения (таким образом, делая ее более сложной), принимать такую ​​возможность или запрещать конечным пользователям делать это.

Если вы работаете с .NET, то ужасно легко создать свой собственный DSL, расширив компилятор Boo (то есть с Rhino.DSL вы можете иметь простой DSL с одним классом).

0 голосов
/ 16 сентября 2008

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

Надеюсь, это не похоже на то, что я говорю, что все выглядит как гвоздь с моим молотком, потому что это не так ... просто в моем опыте это пригодилось не раз: -)

0 голосов
/ 16 сентября 2008

Рассматриваемая реализация Ruby - это Ruleby (http://ruleby.org/wiki/Ruleby)

...