3

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

対象とする組織には、会社->クラスター->ビジネスユニット(BU)->部門->従業員の階層があります。

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

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

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を使用するよりもどのような利点がありますか?

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

よろしく、アシシュシャルマ

4

5 に答える 5

3

それを見た後の私の唯一の提案は、GoFデザインパターンブックから戦略パターンをチェックすることです。戦略は、メインのコンパイル言語ではなくスクリプト言語で実行することをお勧めしますが、そうすると編集が簡単になります。

于 2008-10-16T14:10:54.427 に答える
0

C#でアジャイルの原則、パターン、およびプラクティスを確認したい場合があります。この本の中心的な例は、アジャイルな方法でアジャイルシステムを設計することです。

于 2008-10-16T14:12:10.990 に答える
0

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

両方の長所を組み合わせてみませんか?つまり、マスター SP から呼び出される SP として記述された個別のコンポーネントにロジックを分割しますか?

これはすべてデータ処理です​​。マスター SP を呼び出す以外に、なぜ「アプリケーション層」が関与するのでしょうか。

于 2008-10-16T15:10:40.437 に答える
0

アルゴリズムにどれだけの決定点があるかによって異なります。また、どの程度の変化が見込めますか。

すべての SP アプローチは、処理が均一である場合に最高のパフォーマンスを提供する可能性があります。これにより、データベース キャッシュを最大限に活用し、ネットワークのボトルネックを回避できます。equals/not-equal とは異なる結合基準を持つカーソルとクエリに注意してください (これらがある場合、処理は通常、汎用言語で処理する方が適切です)。

アプリケーションを使用する場合は、ルール管理システムを使用して、データベースの外部でルールをエンコードすることを検討してください。これにより、最大限の透明性と柔軟性が得られます。Java 用の優れた無料のルール エンジンはDroolsです(CLIPS のクローンである Jess を好む人もいます)。.Net オファリングが何かはわかりませんが、最悪の場合、Drools を Web サービスにラップして C# から使用できます。

于 2008-10-16T15:23:19.320 に答える
0

給与計算の生成がオフライン アクティビティである場合は、sps で実行し、スケジュールされたジョブから実行します。アプリケーションがこれに関与する理由はまったくありません。給与計算を予定外に実行できるようにしたい場合は、アプリケーションで同じ SP を呼び出すことができます。

給与計算を行う際に本当に考慮する必要があるセキュリティの問題: どこでも動的 SQL を使用しないでください。テーブルに対する直接的な権限を持つユーザーはいません。すべての権限は sp レベルにある必要があります (また、sps に動的 SQL がないか、テーブル レベルで権限を設定する必要があります)。これは、ユーザーが給与詐欺を犯す能力を制限するためのものであり、非常に重要です。動的 SQL を使用する給与計算システムでは、会社の従業員がテーブルに直接アクセスし、アプリケーションが許可しないことを行うことで不正行為を行う危険があります。これが、sps を使用する以外に、あなたの質問に対する回答を受け入れない理由の 1 つです。

同じ理由で、ビジネス ルールはデータベース レベルで実施する必要があります。ビジネス ルールに従わないデータをクエリ ツールを使用して追加または変更することは望ましくありません。これは、給与計算 (またはその他の金融システム) において非常に重要です。可能であれば制約を使用し、ロジックがより複雑な場合はトリガーします。

誰がいつデータを変更したかを記録するなど、すべてのテーブルを監査する必要があります。

給与計算を変更できるユーザーには十分注意してください。ここでもセキュリティが本当の問題です。私が監督者だからといって、従業員の給与を変更できるべきだという意味ではありません。ここは間違えやすいので注意が必要です。

于 2008-10-16T15:33:50.593 に答える