Search
Write a publication
Pull to refresh

Comments 6

Все бы хорошо, но по-моему сравнивать код if-else с таблицей несправедливо как для кода, так и для таблицы. По сути, и то, и другое являются различными вариантами записи дерева решений.

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

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

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

Да, вы правы, оба эти подхода применимы и нельзя сказать, что надо одно выбросить, а другое оставить. Но! Логика if-else известна каждому школьнику, а про таблицы решений надо рассказывать.

И это еще пол-дела. Если от теоретических построений перейти к конкретной реализации в системах BPM, то разница будет гораздо более заметной. Логику if-else в нотации BPMN реализуют посредством эксклюзивных шлюзов и при большом числе параметров диаграмма становится просто нечитаемой. Вот, например:

Тут всего-то пара вопросов про возраст аккаунта и траты, а уже какая-то каша.

Но есть способ лучше! Упаковываем это все в набор бизнес-правил и наша модель начинает выглядеть вот так:

И да, манипулировать правилами гораздо удобнее, чем деревом. То есть в плане поддерживаемости этот вариант лучше.

Вы просто скрыли граф под "decision table". А как таблица будет выглядеть для такого "простого примера"?

В табличке хранить конечно проще, если нет визуализации графа.

Я в математике не силен, за граф не скажу. Вот чатик утверждает, что DMN можно рассматривать как ориентированный ациклический граф (DAG), поскольку решения строятся на основе входных данных и других решений, не образуя циклов. Может врет, кто его знает.
Но зачем бы мне визуализация? В том-то и смысл, чтоб иметь компактное представление И как на графе смоделировать множественные выходы, когда hit policy = Collect?

За книжку спасибо, гляну.
Но у меня такое ощущение, что мы говорим немного о разных вещах. В контексте управления бизнес-процессами таблицы решений это то, что определено в стандарте DMN. Это совершенно конкретный механизм, реализованный в Camunda и Flowable.

Просто это статья немного верхнеуровневая, в ней опущены технические детали. Например, такая штука как Hit policy, которая определяет, как именно движок обрабатывает бизнес-правила из таблицы и что будет на выходе.

Еще интересное наблюдение. Касающееся в том числе циклов. Таблицу решений можно воспринимать, как автомат с одним состоянием.

Sign up to leave a comment.

Articles