выполнять проверки динамически в зависимости от правил - PullRequest
0 голосов
/ 22 февраля 2010

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

Предположим, что он / она подает заявление на "отпуск по болезни", этот тип отпуска не может быть непосредственно на следующий день "случайным отпуском". Нельзя подать заявление на случайный отпуск, если день, до которого он / она подал заявление, был отмечен как отпуск по болезни. После того, как мы проверили это, мы должны проверить против остатков. Предположим, сотрудник является программистом; он / она может взять максимум 1 отпуск по болезни в месяц (или зарплатный цикл). Количество отпусков по болезни, которое можно взять за один месяц, зависит от назначения сотрудника.

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

Ответы [ 3 ]

1 голос
/ 23 февраля 2010

Недавно я прочитал статью на сайте Мартина Фаулера, в которой говорится о шаблоне «Спецификация».

Вот ссылка Шаблон спецификации

Я думаю, что это может подойти в вашей ситуации.

1 голос
/ 22 февраля 2010

Двигатели правил идеально подходят для сложных бизнес-правил, которые могут часто меняться. Вот список для .Net.

Мы используем Drools (Java-версия) для обработки сложных, постоянно меняющихся финансовых правил, и это было очень успешно для нас.

Вот хорошее руководство по началу работы

Начало работы с Drools.Net

Вот полное руководство пользователя

Руководство пользователя Drools.Net

0 голосов
/ 22 февраля 2010

Однажды я работал над системой, в которой у нас был набор правил, скажем, мы определили 10 удаленных типов правил. Например, Leave Balance будет 1 правилом. Затем мы создали очень простое дерево выражений и оценили каждый узел, чтобы определить, выполнено ли наше условие. Например, вот AndRule, который можно использовать для связывания двух операндов.

public Rule
{

   public abstract Eval(ContextData data);
}

public AndRule
{
    public Rule Left{get;set;}
    public Rule Right{get;set;}
    public override bool Eval(ContextData data)
    { 
       return Right.Eval(data) && Left.Eval(data);
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...