Введение в таблицы решений

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

В формате, где правила являются столбцами таблицы, а каждая строка представляет отдельное условие, таблица решений выглядит следующим образом:

Условия и действия Правило 1 Правило 2 Правило 3 Правило 4
Условие 1 Да Да Нет Нет
Условие 2 Да Нет Да Нет
Действие 1 X - - -
Действие 2 - X - X
Действие 3 - - X -

В этой таблице:

  • Каждый столбец представляет отдельное правило.
  • Каждая строка в верхней части таблицы представляет условие.
  • Нижние строки представляют действия, которые нужно выполнить.
  • “Да” и “Нет” указывают, выполняется ли условие для данного правила.
  • “X” показывает, какое действие следует выполнить для каждого правила.

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

Особенности реализации таблиц в проекте

Таблицы с расширенным входом

Внешний вид таблиц, приведенный выше, - это общий вид таблицы с ограниченным входом. Этот тип таблиц в ячейках условий может содержать только булевы значения, т.е. результаты расчета заданных в первой строке условий. У такого подхода есть свои плюсы и минусы, для меня оказалось критичным то, что для взаимоисключающих условий нужно писать вот такие длинные “диагональные” конструкции:

Условия и действия Правило 1 Правило 2 Правило 3
Документ утвержден Да Нет Нет
Документ отклонен Нет Да Нет
Документ на доработке Нет Нет Да
Действие 1 X - -
Действие 2 - X -
Действие 3 - - X

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

Условия и действия Правило 1 Правило 2 Правило 3
Статус документа Утвержден Отклонен На доработке
Действие Действие 1 Действие 2 Действие 3

Так что я остановился на таблицах с расширенным входом.

Разные режимы расчета таблиц

Строго говоря, расчет таблицы сам по себе никогда не инициирует никакие действия и изменения в системе. Так что общий вид таблиц тут вводит в заблуждение. На самом деле каждая таблица просто возвращает в качестве результата расчета какой-то набор именованных значений, другими словами, словарь, мапу, ассоциативный массив, набор пар “ключ-значение”.

В моей конкретной реализации, впрочем, можно запустить расчет каждой таблицы в нескольких режимах:

  • запрос одного конкретного значения, рассчитанного по таблице. Одно значение может потребоваться для расчета другой таблицы, вывода в интерфейс или в качестве аргумента для какой-то программно описанной функции;
  • запрос всего словаря значений таблицы. Может потребоваться для вывода в интерфейс или для использования внутри программно описанных функций;
  • указание выполнить операции изменения состояния (действия), описанные в таблице. В этом случае ничего не будет возвращено, но зато изменится состояние системы. Этот пункт дает возможность описывать в таблицах полные бизнес-правила, т.е. (1) перечислять условия, при которых действие может (или должно) быть совершено, и (2) перечислять конкретные изменения, которые должны произойти в результате выполнения действия.