Search
Write a publication
Pull to refresh
0
0
Юрий @Sparin

C# Программист

Send message

Раньше я писал Exception'ы, выстраивал цепочки и радовался жизни, перехватывая их через самописный Middleware и оборачивая их в ProblemDetails. А затем я посмотрел сколько RPS теряю на throw new Exception("Hello world!") и мне стало максимально грустно. Терять в 10 раз RPS, только потому что обработка исключения действительно дорогое удовольствие, это очень грустно.


Сначала, я пробовал разные методики, например, которые мне встречались в PInvoke. Если null — то нету, если есть — значит есть. Отсюда и *Default() пошли. Но этого было мало. Логика росла, валидация убивала смысл жизни, а затем я пришел к такому простенькому интерфейсу, а там уже реализация, которая принимала все в себя через конструктор new InteractionResult(result/errors/exception/validationResult)


public interface IInteractionResult
    {
        bool Succeeded { get; }

        IDictionary<string, string[]> Errors { get; }
    }

    public interface IInteractionResult<TResult> : IInteractionResult
        where TResult : class
    {
        TResult Result { get; }
    }

Честно подсмотренная практика у ASP.NET Core Identity. И неважно что здесь она Maybe, в комментариях выше отсыллки Either. Важно, что она решает проблемы и достаточно легко реализуемая конструкция.


Exception'ы это как уровень Error или Critical (нет) в вашем инструменте логирования. Если вы ожидаете, что пользователь может вам недодать информации — это Warning. Скажите вежливо, что вы не можете это сделать, объяснив вежливо почему. Но если произошло действительно что-то необратимое/необрабатываемое, тут уже стоит выкинуть соотвествующий Exception.

Колледж ИТМО

Ой йо. Мб лучше олимпиады навернете, вместо колледжа? Или летнюю компьютерную школу?
https://ditp.ifmo.ru/ru/page/18883/lksh.htm

>PUBG
Стоит вспомнить мобильную версию, которая работает стабильно и даже без «относительно оригинала». При этом практически ничего не урезав

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity