給与システム設計、SPまたはアプリケーション層のビジネスロジック(C#.Net)、保守性-再投稿
-
03-07-2019 - |
質問
クライアント用の給与計算システムを設計しています。
ターゲットとする組織には、次のような階層があります。 会社->クラスター->ビジネスユニット(BU)->部門->従業員
従業員の給与は、さまざまな給与要素で構成されています。 各給与コンポーネントには、計算ルール(他のコンポーネントの%、固定数または固定数の%としてコンポーネントを計算)、適格ルール(従業員/部門がコンポーネントに適格かどうか)、およびコンポーネントの最大値と最小値を制限する制約ルール。
****これらのルールは編集可能で、ユーザーエンドユーザーが編集できます**。また、これらのルールはトップダウンで継承されますが、下位レベルで定義されている場合、下位レベルのルールが優先されます。**
Attendance、Leaves、Bonusesテーブルを持つデータベースがあり、これらのルールはこれらのテーブルと対話することも想定されています。
クライアントは、それぞれが個別のデータベースインスタンスをホストする複数のクライアントの給与を生成します。それらはそれぞれ、各コンポーネントの異なる解釈を持ち、異なるコンポーネントを持つ場合があります。
SQL Serverのサポートのみを検討しており、給与計算の生成はオフラインアクティビティになります。
これらのルールを使用して個々の税コンポーネントを生成するロジックを配置する場所が分かれています(税控除、税の償却、手当などが含まれます)。
一部の人々は、従業員IDを取得してその月の給与計算を生成するマジックSPを提唱しています。 他の人は、ロジックを個別のコンポーネントに分割して、アプリケーション層の従業員の依存データを取得し、そこでそれらのコンポーネントを計算することを望んでいます。
優先順位は次のとおりです。 1.変更を新しいクライアントに迅速に適応させる能力 2.長期保守性 3.パフォーマンス
1と2はここでは3よりも重要です。これはオフラインアクティビティになるからです。
保守性とクイックカスタマイズ性は非常に重要です。さまざまなクライアントにアプリケーションをデプロイします。 クライアントAには、((0.3 *基本)+ 800)として給与コンポーネントルールがある場合があります およびクライアントBとして(0.2 *基本)+(0.1 *出席ボーナス)
上記のルールはエンドユーザーが指定し、Web UIを介してカスタマイズする必要があるため、SPはここで混乱を引き起こします。 SQLから式を解析する必要があります。それはどれほど難しいか簡単ですか? アプリケーション層(C#.Net)でこれを行うと、SPを使用するよりもどのような利点がありますか?
元の投稿は次のとおりです。 デザインのヒント、給与システム...再投稿 ...ただし、適切に回答された質問はありません。
既存のシステムのアーキテクチャへの提案とポインタは非常に役立ちます。 ...そして、はい、LINQ to SQLをシステムの他の場所で使用しています。
よろしく、 アシッシュシャルマ
解決
私は常に、DBレイヤーにビジネスロジックを配置することを避けようとしています。記述、デバッグ、および保守がより困難です。さらに、DBは一般に、拡張するのに最も高価なレイヤーです。より多くのユーザーをサポートするためにシステムを強化する必要がある場合、システムに新しいウェブサーバーを追加するのは比較的安価で簡単ですが、DBインスタンスの追加は各DBにライセンスと追加サポートが必要になるため高価になります。
他のヒント
たとえばJEP(Javaの場合)のように式を保存する場合、それほど問題はありません。数式全体を文字列として保持するだけです:" pay =((0.3 * Basic)+ 800)そして、それをツリーに解析します。
情報についてはjepのドキュメントを参照し、そこからアイデアを得ることができます。ここに投稿した数式の単純なソルバーを実装するのに問題はありません。
私の提案:
- データベース内の文字列に保管します
- evalおよびパーサー用の小さなライブラリを作成します。
- それをバイナリツリーに解析します。 (「+」が800を指し、「」を指す場合)、「」は「basic」および「0.3」を指します
- それを解決するには、単純な再帰関数が必要です。
これらの式の複雑さがそれほど大きくない場合は、処理にそれほど時間がかからないため、任意の側でこれを行うことができます。
文字列で表される式を評価する.Netソリューションを探している場合は、 ANTLRおよびC#を使用して、計算エンジンを作成します。文字列を解析し、ASTを構築してから式を評価する完全に機能する数式インタープリターがあります。さらに、計算エンジンは訪問者パターンを使用して実装されているため、データベース検索などの実行したい機能がある場合は、ソリューションにカスタマイズを簡単に組み込むことができます。
Reflectionまたはデリゲートについて聞いたことがありますか?