私は、ユーザー操作によってリクエストの現在のステータスが変更される状況があります。私は何の例外を投げるべきですか?私はメッセージを提供すべきですか?
のみ特定の操作が可能であり、現在の状況に応じて、すなわち
保留 が承認承認または却下または取り消すことができることが「キャンセル要求」することができます 「キャンセル要求」は「キャンセル「を取り消し承認済み」またはすることができます要求された '
私の質問は、要求された操作を実行できない場合にどのような例外を発生させるべきですか? inbuilt例外を使うべきですか、InvalidCurrentStatusExceptionやそのようなものなどのカスタム例外を作成する必要がありますか?
InvalidOperationExceptionのドキュメントを見ると、「オブジェクトの現在の状態に対してメソッド呼び出しが無効な場合にスローされる例外」のようにプライム候補に思えます。
カスタム例外の2番目のオプションを使用すると、メッセージを提供する必要はありません。
Inbuilt InvalidOperationExceptionを使用してメッセージを提供する必要がありますが、そのメッセージはどうすればよいですか?
UPDATE:
ここで、現時点で私が持っているコードです:
internal void CancelRequest(int requestID, int userID, string notes)
{
DateTime editDate = DateTime.UtcNow;
var request = this.FindByID(requestID, CancelRequestIncludes);
if(request == null)
{
throw new ArgumentException(InvalidRequestMessage);
}
var currentStatus = request.LeaveRequestStatuses.Where(s => s.IsCurrent).FirstOrDefault();
if (currentStatus.StatusID == (int)RequestStatuses.RequestPending)
{
SetNewRequestStatus(request, currentStatus, RequestStatuses.CancellationApproved, userID, notes, editDate);
}
else if (currentStatus.StatusID == (int)RequestStatuses.RequestApproved)
{
if (ValidApprover(request.UserID, userID))
{
SetNewRequestStatus(request, currentStatus, RequestStatuses.CancellationPending, userID, notes, editDate);
}
else
{
//throw an invalid approver exceptioon
}
}
else
{
//throw exception as cant carry out cancellation
}
Context.SaveChanges();
}
私はシステムクラスのための私のコードとシステム例外のためのカスタム例外を使用することを好むこれはあなたを助けることができます。 – ganchito55
要求が無効であることを検出できる場合は、何らかのエラーメッセージと比較して例外をスローするか、無効なオプションを条件付きで無効にしてユーザーが傾けることはできません悪いことをする。 – Plutonix
私は@Plutonixに同意します。この場合、例外をスローするのではなく、一種の「アプリケーションステータス」プロパティと列挙型(承認済み、拒否済み、キャンセル済み)を使用できます。あなたはプログラムフロー制御の例外やコードが検出できる状況に対して例外を使用しないでください。 –