2012-05-08 15 views
1

私はビジネスルールを処理する最も一般的な方法を理解しようとしていますが、そのルールは必ずしも実行可能ではありません。
フォームはstored_procedure呼び出しによってデータベースに送信されています。現在、ビジネスロジックは、独立したビジネスアプリケーションレイヤではなく、stored_procedureに書き込まれます。ストアドプロシージャは、エラーとエラーレベル(情報、アドバイス、警告、エラー、および致命的)を含むデータセットを返します。C#ASP.NET over-rule非強制的なビジネスルール

情報は、必要なものを更新するためのものです。
アドバイスは、ユーザーが更新/挿入を中止することができますが、デフォルトのアクションは
警告は、ユーザーが更新/挿入を中止することができますが、デフォルトのアクションは
エラーをキャンセルするために通常に関連する、必須のビジネスルールに違反している続けることですデータの整合性を維持し、更新/挿入を強制的にキャンセルしますが、ユーザーは送信中のデータを変更して再試行することができます。
致命的な問題はユーザーが修正できないものです(データベースへの接続が失われ、フォームが入力されたなど)、強制的にトランザクションを中止します。

ここに私がしようとしているものの例があります。

  • コード
  • を季節コードを設定するためのフォームDescrption
  • 開始日
  • 終了日

必要な検証の2種類があります。

必須:例えばコードと説明は完了している必要があります。開始日は前の日付でなければなりません。終了日

オプション:開始日と終了日は通常連続しません。つまり、次の季節の開始日は終了日の翌日です。プレヴィオウスのシーズンですが、これは常にそうではありません。ユーザーにエラーが発生している可能性があり、入力したデータが正しいことを確認するよう警告します。彼らが確認したら、私は再提出の検証ルールを無視する必要があります。

私は、ストアドプロシージャの余分なパラメータを無視して、ユーザが問題がOKであると確認した場合にのみ、再提出時に設定されるオプション(情報と警告)を無視すると考えています。エラーと致命的なエラーが発生しても、更新は失敗します。

誰かがより良い選択肢を提案できますか?

答えて

1

ルールがTrueと評価された場合、メソッド(ルール・アクション)を呼び出す実行タイプのビジネス・ルールだけが必要です。アクションは、パラメータ(例えば、列挙型ErrorLevel)をとり、それに応じて動作し、エラーを記録し、ユーザに通知し、ユーザのエントリを保存するなど)。次のようなもの:

If UserRole is Admin and (StartDate is less than or equal to EndDate) 
then Prosess(ErrorLevel.Info) 
else Abort(ErrorLevel.Fatal) 
関連する問題