Проблема просто слишком сложна для традиционного кода: Проблема может быть не сложной, но вы не видите нехрупкого способа ее решения.
Проблема не поддается никакому очевидному решению на основе алгоритмов: Проблема сложна для решения, нет очевидных традиционных решений или проблема не до конца понятна.
Логика часто меняется: Сама логика может быть простой (но не обязательно), но правила меняются довольно часто. Во многих организациях выпуски программного обеспечения происходят редко, и правила могут помочь обеспечить необходимую и ожидаемую "гибкость" достаточно безопасным способом.
Доменные эксперты (или бизнес-аналитики) легко доступны, но не являются техническими специалистами.
Взято с этого сайта
Механизм правил вычисляет решение на основе одного или нескольких входных параметров.
На самом низком уровне механизм правил прямой цепочки позволяет вам структурировать наборы правил (часто большие наборы правил) примерно следующим образом:
if (Condition A) {assert (Condition B)}
if (Condition C) {assert (Condition B)}
if (Condition B) {do something}
Условия также могут иметь параметры:
if (Condition A (X, Y)) {assert (Condition B (X)}
if (Condition C (X)) {assert (Condition B (X)}
if (Condition B (X)) {do something with X}
Эти цепочки могут быть сколь угодно глубокими. Алгоритм Rete и его разновидности позволяют эффективно обрабатывать большие наборы правил.
Проблема, которую решают движки правил, состоит в том, чтобы отделить обслуживание наборов правил от приложения - правила можно перенастроить, не перестраивая приложение. Хотя (теоретически) нетехнические аналитики или малые и средние предприятия могут сами поддерживать наборы правил, на практике требуется немного технической смекалки, чтобы не выстрелить себе в ногу по сложному набору правил - а механизмы правил немного бессмысленны, если вы их не используете. У меня нет большого набора правил.
Механизмы правил действительно эффективны там, где набор правил велик и часто меняется, или там, где они встроены в упакованные приложения и используются для настройки приложения для поддержки бизнес-правил или триггеров рабочего процесса для конкретных клиентов.
Механизмы правил имеют тенденцию пытаться решить проблемы, которые часто меняются или иногда плохо определены, быстро и легко.
Они не очень сложные, и многие реализации представляют собой серьезные проблемы с производительностью и масштабированием.
Механизм правил может инкапсулировать бизнес-логику, часто в декларативной форме. Это позволяет избежать необходимости кодировать бизнес-логику в программном обеспечении.
Алгоритм механизма правил - это способ реализации сопоставления и срабатывания правил, то есть это скорее деталь реализации, чем собственно решение проблемы. Алгоритмы могут иметь различные нефункциональные достоинства или недостатки. Общим примером алгоритма движка правил является Rete Algorithm, используемый в движках правил Java JESS и Drools.