2009-08-24 12 views
4

.NETで給与アプリケーションを作成しています。要件の1つは、出席と控除のルールが動的であり、柔軟性が最も高いことです。ユーザーは、すべての従業員が出席ルールに拘束される独自のルールを定義できる必要があります。動的ビジネスルールのアーキテクチャ

すべての出席ルールのコードがデータベースに格納され、実行時にコンパイルされるところで、C#コードをオンザフライでコンパイルする方法がありますが、これはルールを読み込み/理解できるため最も洗練されたソリューションではありません技術者によって、コードのパフォーマンスと可読性が最良の可能性はありません。

出席ルールを定義して適用し、スクリプトを書かずに、またはC#コードを動的にコンパイルすることなく、それに基づいて控除を計算できるsolution \ architectureパターンがあるのだろうかと思います。

答えて

2

Booは、拡張可能なコンパイラを備えた本格的な.NET言語です。

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アセンブリにコンパイルする場合、これらの規則は、驚くほど速く実行されます:Ayendeは、彼のようなものを可能にするために、コンパイラを拡張するトピックについて説明し、「Building Domain Specific Languages in Boo」と呼ばれる素敵な本を、書かれています。ただし、生成されたコードを別のAppDomainで実行して、ルールが変更された場合にアンロードできるようにする必要があります。

0

インタープリタを埋め込み、いくつかのテンプレート、ビジュアルツールを使用して、ユーザーに新しいコードを追加させることができます。

2

システムを変更するためのコードコンパイルに頼るのは本当に悪い習慣です。「ルールはいつでも変更できます。必要なのは開発者だけです」と言うこともできます。

ルールを定義する場合は、パラメータをDBに格納し、実行時にそれらを読み取るコードで適用することができます。あなたのコードはより複雑になりますが、これは設定のために支払う代金です。

ルールを定義する必要があります。つまり、どのようなパラメータを使用するか、どのように適用できるかを正式に定義する必要があります。

例えば、 90%の出席者が5%の控除を意味する場合、これらの2つの値をDBに保存します。あなたのコードは実際の出席者を取得し、対応する行を見つけて控除を適用します。ルールが非常に複雑で、このようなパラメータでモデル化できない場合を除き、構成システムを使用することが最善の方法です。その後、ユーザーに単純なGUIを提供して、ルールの値を微調整することができます。

関連する問題