1

クライアント向けの給与計算システムを設計しています。

私たちが対象としている組織は、次のような階層を持っています: 会社 -> クラスター -> ビジネス ユニット (BU) -> 部門 -> 従業員

従業員の給与は、さまざまな給与コンポーネントで構成されています。各給与コンポーネントには、それに関連付けられた 3 つのルール、計算ルール (コンポーネントを別のコンポーネントの %、または固定数または固定数の % として計算)、適格性ルール (従業員/部門がコンポーネントに対して適格であるかどうか)、およびコンポーネントの最大値と最小値を制限する制約ルール。

****これらのルールは編集可能であり、ユーザー エンド ユーザーが編集できます**。また、これらのルールはトップダウンで継承されますが、下位レベルで定義されている場合は、下位レベルのルールが優先されます。**

出席、休暇、ボーナスのテーブルを持つデータベースがあり、これらのルールもこれらのテーブルとやり取りすることになっています。

クライアントは、それぞれ個別のデータベース インスタンスをホストする複数のクライアントの給与を生成します。それらはそれぞれ、各コンポーネントの異なる解釈を持っている可能性があり、異なるコンポーネントを持っている可能性があります。

SQL Server のサポートのみを検討しており、給与計算はオフライン アクティビティになります。

これらのルールを使用して個々の税コンポーネント (税額控除、税控除、手当などを含む) を生成するロジックをどこに配置するかについては、意見が分かれています。

一部の人々は、従業員 ID を取得してその月の給与を生成する魔法の SP を提唱しています。他の人は、アプリケーション層で従業員の依存データを取得し、そこでこれらのコンポーネントを計算する個別のコンポーネントにロジックを分割することを望んでいます。

優先順位は次のとおりです。 1. 新しいクライアントに変更を迅速に適応させる能力 2. 長期的な保守性 3. パフォーマンス

これはオフラインのアクティビティであるため、1 と 2 は 3 を大幅に上回ります。

保守性と迅速なカスタマイズ性は非常に重要です。さまざまなクライアントにアプリケーションを展開します。クライアント A は ((0.3 * Basic) + 800) の給与コンポーネント ルールを持ち、クライアント B は (0.2 * Basic) + (0.1 * 出席ボーナス) のように定義します。

上記のルールはエンド ユーザーによって指定され、Web UI を介してカスタマイズ可能である必要があるため、SP はここで混乱を引き起こします。SQL から数式を解析する必要があります。それはどのくらい難しいですか、それとも簡単ですか?アプリケーション層 (C# .Net) でこれを行うと、SP を使用する場合よりもどのような利点がありますか?

元の投稿は次のとおりです: デザインのヒント、給与システム...再投稿 ...しかし、適切に回答された質問はありませんでした。

既存のシステムのアーキテクチャへの提案とポインタは非常に役立ちます。...そして、はい、システムの他の場所で LINQ to SQL を使用しています。

敬具、アシッシュ・シャルマ

4

4 に答える 4

3

私は常に、ビジネス ロジックを DB レイヤーに配置することを避けようとしています。作成、デバッグ、および保守がより困難になります。さらに、DB は一般的にスケーリングに最もコストのかかるレイヤーです。より多くのユーザーをサポートするためにシステムを強化する必要が生じた場合、システムに新しい Web サーバーを追加するのは比較的安価で簡単ですが、DB インスタンスを追加するのは各 DB にライセンスと追加のサポートが必要なため、費用がかかります。

于 2008-10-16T18:58:53.843 に答える
0

たとえば、JEP (Java 用) のように式を保存する場合、それほど問題にはなりません。完全な数式を文字列として保持するだけです: つまり、「pay=((0.3 * Basic) + 800)」をツリーに解析します。

情報については、いくつかの jep ドキュメントを参照して、そこからアイデアを得ることができます。ここに投稿した式の単純なソルバーを実装するのに問題はありません。

私の提案:

  • データベース内の文字列に保管してください
  • eval とパーサー用の小さなライブラリを作成します。
  • 二分木に解析します。('+' は 800 を指し、' ' も指します)、' ' は 'basic' と '0.3' を指します。
  • その後、それを解決するために単純な再帰関数が必要です。

これらの数式の複雑さがそれほど大きくない場合は、処理にそれほど時間がかからないため、好きな側でこれを行うことができます.

于 2008-10-16T18:58:27.823 に答える
0

文字列で表された式を評価する .Net ソリューションを探している場合は、ANTLR と C#を使用して計算エンジンを作成する方法について詳しく説明している優れた記事をご覧ください。文字列を解析し、AST を作成し、式を評価する、完全に機能する数式インタープリターがあります。さらに、Visitor パターンを使用して計算エンジンが実装されているため、データベース ルックアップなどの実行したい機能がある場合は、カスタマイズをソリューションに簡単に組み込むことができます。

于 2008-10-20T00:00:38.897 に答える
0

Relection または delegates について聞いたことがありますか?

于 2009-01-22T04:22:28.637 に答える