Бизнес-правила, действительные в течение определенного промежутка времени - как упорядоченно управлять - PullRequest
12 голосов
/ 30 июня 2011

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

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

if application.date >”July 17th, 2008”

Как лучше всего решить эту проблему?

Ответы [ 4 ]

7 голосов
/ 30 июня 2011

Это похоже на случай Цепочка ответственности .У вас были бы обработчики для каждого законодательного органа.Сначала вы передаете приложение последнему обработчику.Если он слишком старый, он передает его обработчику для предыдущего законодательного органа.

5 голосов
/ 30 июня 2011

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

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

1 голос
/ 12 июля 2011

Если правила сложные, вам может понадобиться (бизнес) механизм правил . Я не знаю, какие реализации существуют для вашей платформы, но для Java типичным выбором является Drools и его Экспертный подпроект . Он определяет предметно-ориентированный язык для определения правил. Обратите внимание, что он может иметь интерфейс для не-Java пользователей.

В противном случае вы можете попробовать что-то вроде паттерна стратегии - у вас есть список стратегий с двумя методами appliesTo(date) и handle(data). Вы перебираете список и, если стратегия применима к дате - пусть она обрабатывает данные.

0 голосов
/ 30 июня 2011

На уровне архитектуры существует два подхода для решения этой проблемы.

Первый - это ETL данных на ваш склад до , к которым применяется бизнес-логика. Я предпочитаю такой подход.

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

В Интернете доступно огромное количество комментариев . Среди этих источников я рекомендую любые статьи (бесплатно) или книги (не бесплатно) Ральф Кимбалл .

Лучший способ примирить быстро меняющееся измерение почти наверняка зависит от конкретного факта; тем не менее, возможно, наиболее распространенным методом является создание новой таблицы измерений, в которой хранятся данные, примененные к новой бизнес-логике. Другими словами, в вашей схеме DW должна быть отдельная таблица измерений для каждого бизнес-правила.

...