У меня возникла ситуация, когда пользовательская операция меняет текущий статус запроса.Какое исключение я должен бросить, и должен ли я предоставить сообщение?
В зависимости от текущего состояния, то только определенные операции возможны т.е.
В ожидании могут быть утверждены или отклонены или Отменено Одобрено может быть «Отменить Запрошенный» «Отмена Запрошенный» может быть «Отмена Одобрено» или «Отмена Запрошено '
Вопрос: какой тип исключения я должен поднять, если запрошенная операция не может быть выполнена? Должен ли я использовать встроенное исключение или я должен создать настраиваемое исключение, такое как InvalidCurrentStatusException или некоторые такие?
Рассмотрение документации для InvalidOperationException кажется простым кандидатом, поскольку это «исключение, которое вызывается, когда вызов метода недействителен для текущего состояния объекта».
Если я перехожу со вторым вариантом специального исключения, то мне не нужно предоставлять сообщение.
Если я использую встроенное 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
Если вы можете обнаружить, что запрос недействителен, зачем вообще исключать какое-либо исключение из-за какого-либо сообщения об ошибке. Или лучше отключить недействительные параметры условно, чтобы пользователь не мог Do Bad Things. – Plutonix
Я согласен с @Plutonix: в этом случае вместо исключения исключений вы можете использовать своеобразное свойство «Статус приложения» и «Перечисление» («Утверждено», «Отклонено», «Отменено»). С уважением, –