Есть бизнес класс, который выполняет какую-то единицу работы:
class EmployeeCalculator
{
public Pay CalculatePay(Employee employee)
{
//Do somthing
}
}
По каким-то причинам выполнение метода CalculatePay может завершиться с ошибкой.
Собственно вопрос: как лучше будет передать ошибку ? Можно сделать какой-нибудь класс типа:
public class PayResult
{
public Pay Pay { get; set; }
public bool IsError { get; set; }
public string ErrorMessage { get; set; }
}
И возвращать его из метода CalculatePay, а на вызывающей стороне проверять IsError.
Либо из метода CalculatePay бросить исключение, и так же на вызывающей стороне ловить его. Если бросать исключение то на каком уровне его ловить (предположим что наше приложение использует MVC) ? На уровне контроллеров и там уже перерабатывать и выдавать сообщения на UI или это может быть отдельный слой обработки ошибок между контроллером и бизнес логикой ?
PS. Буду благодарен любой информации по вопросу (ваши мысли, статьи, книги).
Ответ
Все зависит от причины, по которой не удалось посчитать Pay.
Если это действительно исключительная ситуация - например, невалидные данные для расчета - то нужно бросать исключение.
Если это ожидаемая ситуация - например, Employee ничего не заработал - то стоит возвращать или Pay с 0 (возможно, как преодпределенный экземпляр Pay.None), или возвращать null - если ваш клиентский код готов этот null обработать.
Комментариев нет:
Отправить комментарий