GOOGLE ADS

вторник, 12 апреля 2022 г.

Когда использовать новый тип исключения

Каковы рекомендации по созданию нового типа исключения вместо использования одного из встроенных исключений в.Net?

Проблема, которая заставила меня задуматься, заключается в следующем. У меня есть служба WCF, которая является базовой службой ввода-вывода. Если служба не может создать вывод, потому что ввод недействителен, я хочу создать исключение, но какое?

Прямо сейчас я просто бросаю system.Exception, но мне это кажется неправильным, я не знаю почему, это просто неправильно. Одна вещь, которая меня беспокоит, если я тестирую ее с помощью модульного теста и ожидаю, что будет выдано исключение system.Exception. Исключение также может быть вызвано фреймворком или другим кодом, а не кодом, который я исключил. Тогда тест пройдет, так как я получу ожидаемое исключение, но он должен был провалиться.

Что ты порекомендуешь?


Решение проблемы

Избегайте бросать System.Exceptionили System.ApplicationExceptionсебя, так как они слишком общие.

Для сервисов WCF существуют Fault Contracts — общее исключение, которое вы можете указать подписчикам для обработки.

Пометить интерфейс командой:

[FaultContract( typeof( LogInFault ) )]
void LogIn( string userName, string password, bool auditLogin );

Затем, если есть исключение, вы можете выдать эту конкретную ошибку:

throw new FaultException<LogInFault>( new LogInFault(), "message" );

Используйте [DataContract]сериализацию по своей вине - это избавит вас от необходимости обрабатывать все исключения сериализации, которые обычно требуются.

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...