Дизайн приложения - изменяемые бизнес-правила - PullRequest
3 голосов
/ 21 июня 2011

Ищу несколько советов по оформлению приложения.Поскольку я подписал соглашение о неразглашении, я не могу рассказать слишком много о реальном бизнесе, но постараюсь объяснить требования.

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

Клиент указал, что он хотел бы, чтобы бизнес-правила были модифицируемыми, т.е. что-то, что они могли бы изменить, и это не было бы жестко закодировано или застрялокод где-тоОни определили набор правил как «шаблон».Система будет иметь только один активный шаблон за раз, но в течение срока ее службы может быть много шаблонов.

Эти правила будут состоять из нескольких операторов, проверяющих разные типы данных.Каждому этапу / этапу правил будет присвоен определенный вес.Примером «шаблона» может быть

  • Является ли клиент мужского пола = 10 баллов
  • Является ли клиент женского пола = 20 баллов

  • Клиенту от 25 до 35 лет?= 20 баллов

  • Является ли клиент моложе 25 лет?= 10 баллов

  • зарабатывает ли клиент от 30000 до 50000 долларов в год = 20 баллов

Итак, как вы можете видеть, есть сравнения /операторы различных типов (булевы, целочисленные и т. д.).

Я ищу фреймворк / совет, по которому я могу построить эти «шаблоны».Это веб-работа, поэтому мы знаем, что мы определенно будем использовать какую-то БД.Технология еще не определена, но, вероятно, будет между PHP и .NET.На данном этапе мы думаем, что многое из этого будет сделано в SQL (и хотели бы посмотреть, будет ли это хорошей идеей)

Существуют ли какие-нибудь примеры приложений, через которые я мог бы пройти?Кто-нибудь делал такие работы раньше?

Спасибо!

Ответы [ 3 ]

1 голос
/ 21 июня 2011

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

В зависимости от объема работы, которую вы хотите здесь выполнить, это звучит как хорошая работа для предметно-ориентированного языка .@Ozair предложил BPEL, но это может быть излишне.

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

Если все ваши правила настолько просты, вы можете использовать что-то вроде:

Rule {
    ruleId,
    templateId,
    comparisonType,
    fieldName,
    minValue,
    maxValue,
    scoreIfPassed
}

Template {
    templateId,
    rules
}

... так что Rule ассоциируется с Template и указывает тип сравнения для применения (как 'greatThanMin', 'lessThanMax', 'correctValue', 'insideRange' и т. д.) для данного поля.Тогда вы можете сделать:

user.score = 0;
rules = currentTemplate.rules;
for each rule in rules do
    if rule.comparisonType == 'exactValue' && user[field] == minValue
        user.score += rule.scoreIfPassed;
    else if rule.comparisonType == 'insideRange' && user[field] > minValue && user[field] < maxValue
        user.score += rule.scoreIfPassed;

    ...
end  
...