Ликбез по таблицам принятия решений
Введение в таблицы решений
Таблицы решений - это мощный инструмент для анализа и документирования сложных бизнес-правил и процессов принятия решений. Они представляют собой визуальное представление логики “если-то”, которое легко читать и понимать.
В формате, где правила являются столбцами таблицы, а каждая строка представляет отдельное условие, таблица решений выглядит следующим образом:
Условия и действия | Правило 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) перечислять конкретные изменения, которые должны произойти в результате выполнения действия.