Архитектура для динамических бизнес-правил - PullRequest
4 голосов
/ 24 августа 2009

Я создаю приложение для расчета заработной платы в .NET. Одним из требований является то, что правила посещаемости и вычетов должны быть максимально динамичными и гибкими. Пользователь должен иметь возможность определять свои собственные правила, где каждый сотрудник будет связан с правилом посещаемости.

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

Мне интересно, существует ли шаблон решения \ архитектуры, который позволяет мне определять и применять правила посещаемости и рассчитывать отчисления на их основе без написания сценариев или динамической компиляции кода C #.

Ответы [ 3 ]

2 голосов
/ 24 августа 2009

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

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

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

например. если посещаемость 90% означает вычет 5%, то вы сохраните эти 2 значения в БД. Ваш код затем получит фактическую посещаемость, найдет соответствующую строку и применит вычет. Если ваши правила не настолько сложны, что их нельзя смоделировать с помощью таких параметров, как использование системы конфигурации, это лучший способ для продолжения. Затем вы можете предоставить пользователям простой графический интерфейс для настройки значений в правилах.

2 голосов
/ 24 августа 2009

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

when User.is_preferred and Order.total_cost > 1000: 
    add_discount_precentage 5 
    apply_free_shipping 
when not User.is_preferred and Order.total_cost > 1000: 
   suggest_upgrade_to_preferred  
    apply_free_shipping 
when User.is_not_preferred and Order.total_cost > 500: 
   apply_free_shipping

При компиляции в сборку .NET эти правила будут выполняться невероятно быстро. Однако вам нужно выполнить сгенерированный код в другом домене приложений, чтобы его можно было выгружать в случае изменения правил.

0 голосов
/ 24 августа 2009

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

...