Приветствую!
Я уже несколько дней голову ломаю никак не получается придумать вариант реализации бизнес-логики.
Итак, есть BL, состоит из ~20 пунктов, каждый пункт состоит из ещё ~10 подпунктов.
Отмечу, что данная BL описывает use case регистрацию нашего приложения с мобильного устройства к нашему сервису.
Описание примерно такое:
Приложение шлёт следующие параметры:
список параметров, типов, флагов обязательности
Система проверяет полученную информацию по следующим правилам:
а. Требуемые параметры заданы
б. Параметр А валиден и существуют в системе соответствующие этому параметру сущности (D, E, L, M).
в. Параметр B соответствует множеству вариантов свойства C у сущности D.
г. Свойство F сущности E не превышает значение свойства G у сущности D.
д. ... куча подобных проверок
Система отсылает некий промежуточный ответ (если соответствующий флаг H1 определён в сущности D)
а. (Если флаг H2 определён в сущности D и свойство J сущности E == 1) или флаг H3 определён в сущности D ; система посылает сформированный промежуточный ответ
Получаем ответ от приложения и валидируем его
... несколько пунктов спустя
система создаёт объект сущности K и связывает его с сущностью E
а. свойство P1 сущности K =
I. L.P2 + E.P3 если L.P4 = 5
II. L.P2 + (E.P3 * CFG1 /100) если L.P5 = 10 И M.P6 = 1
...
система меняет свойство E.J в 1 если E.J == 0
...
система сохраняет сущность K в системе и отправляет сущность K устройству
По дурацки описал, к сожалению по NDA не могу привести конкретные данные, но масштаб бедствия думаю, что понятен.
Наши тестировщики по данному кейсу регистрации описали > 100 тест-кейсов.
Я попробовал прототип сделать, получился код лапшой. Попробовал разбить на кучу мелких классов — запутался во всех этих свойствах, кто что когда должен менять.
Посмотрел как в исходном коде MS Unity используются стратегии и политики через некий pipe, получил кучу стратегий которые берут данные из политик и как-то работают. Но совершенно потерялась наглядность и не понятно кто как и какие политики должен задавать.
Сейчас подумываю в сторону Windows Workflow Foundation.
Был бы очень рад, если бы подсказали идею как это можно реализовать и как это можно описать (UML диаграммы?) чтобы другие программисты видели те же самые требования, но уже ближе к реализации (в требованиях нет деталей реализации, поэтому 2 слова в требованиях могут раскрываться в 2 таблицы в БД и кучу кода).
Спасибо.