Re[10]: обработка ошибок
От: MadHuman Россия  
Дата: 09.04.22 08:57
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

vaa>>
vaa>>Result result = new Result.Ok("OK");

vaa>>WriteLine(result switch
vaa>>{
vaa>>    Result.Ok x => "200 " + x.Result,
vaa>>    Result.Error e => "400 " + e.Err
vaa>>});

vaa>>public record Result()
vaa>>{
vaa>>    public record Ok(string Result) : Result();
vaa>>    public record Error(string Err) : Result();
vaa>>}
vaa>>


НС>ЧТД. Ровно 100% этого кода при использовании исключений можно выкинуть.


не совсем. Result — может быть библиотечным/инфраструктурным.
вместо свитча — будет try/catch. я бы сказал примерно одно и тоже.
в общем случае исключения конечно удобнее (когда не надо каждый вызов функции хэндлить и обрабатывать ошибку), за счет меньшего шума и доп бойлерплейта.

паттерн Result лучше, когда ошибочная ситуация ожидаема и часть штатного поведения, в этом случае лучше и перф (иногда это важно).
и мы точно знаем все ожидаемые исходы из самого типа результата.
решается и исходная проблема топика — неоднозначность места исключения (возникло ли оно внутри самой функции и то что мы и хотим словить либо из более глубоких недр).
ввод нового класса исключения по бойлерплейту будет примерно тоже что ввод нового класса Result для конкретного случая.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.