А может и баксов. Здесь важно не это, я в статье намеренно опустил рассмотрение разных валют. Дело в том, что неясно даже само значение.
Не очень понимаю зачем столько кода вокруг копеек — судя по MSDN decimal в dotnet это уже структура содержащая целочисленные значения и кол-во знаков после запятой, то есть ваша же Money только factor выражается не как 100, а как 2.
decimal не несёт в себе никакой информации о том, что представлено этим числом.
decimal a = 10; //что это?
Жесть :-D
Извините, код сегодня написал, накатал тесты, но этот кейс забыл. Просмотр элементарный. Код не в продакшне, разумеется :-D
Уже поправил в статье. Спасибо, что указали.
Я предположил. Вопрос был такой: «Что значит «наверху ожидается отсутствие исключений»? Если я ошибся — поясните. Я не понимаю, но очень хочу понять, потому что считаю тему очень сложной и до конца непонятной.
Что значит «наверху ожидается отсутствие исключений»? То есть, если кто-то добавил новый тип, который выбрасывается в определённых обстоятельствах, то верхний уровень никак не обработает и исключение полетит на самый верх? Если так, чтож, великолепно. Именно когда так люди программируют и получаются, например, такие ситуации:
Включаю Visual Studio, потом Kaspersky Password Manager, что-то в нём делаю, затем тыкаю в редактор исходного кода в VS и, вуаля, она падает. А всё потому что где-то был захвачен некий глобальный хук или что-то подобное, а исключение, которое полезло никто не поймал. В 99%, когда программа падает я вижу, что нет ни одной причины по которой она не могла бы спокойно продолжить работать. Даже если предположить, что сейчас мне некоторая фича недоступна, то зачем гасить всё приложение?
Не совсем понял вас, уточните, пожалуйста.
1. Каким образом вы становитесь уверенными с помощью статического анализа в том, что исключение не пройдёт глубже слоя VM?
2. Что будет, если кто-то добавил новый тип исключения в глубине кода и не предупредил или забыл предупредить, что в системе теперь есть новый тип исключения?
Про статический анализ понятно. Я хотел обсудить другой вопрос: согласны ли вы с тем, что в таких случаях можно поймать все исключения, профильтровать на АДСКИЕ и просто вывести сообщение об ошибке? Иначе однажды исключение пролетит до самого корня и там нам придётся выводить «Спасите-помогите, критическая ошибка», вместо всё того же сообщения «Ошибка открытия файла». Это первый вопрос.
Можете прокомментировать этот комментарий на схожу тему? Это второй вопрос. Тема крайне интересная и до конца не понятая, как мне кажется.
поскольку можно посмотреть секцию exceptions документации.
А вы там не найдёте всех возможных исключений. Даже половины. Так что же ловить? :)
Если бы File.Open делал я, то я бы поймал все исключения во ViewModel, вывел сообщение пользователю о том, что беда с открытием файла. И фильтранул на OutOfmemory (это сначала и если это не оно, то вывел бы сообщение просто).
Предположим вам надо сделать File.Open, какие исключения вы будете ловить? Предположим, что у нас MVVM, команда на открытие пришла из VM в Model. То есть, в Model мы делаем File.Open. Какие исключения вы будете ловить и где?
А может и баксов. Здесь важно не это, я в статье намеренно опустил рассмотрение разных валют. Дело в том, что неясно даже само значение.
decimal не несёт в себе никакой информации о том, что представлено этим числом.
decimal a = 10; //что это?
Извините, код сегодня написал, накатал тесты, но этот кейс забыл. Просмотр элементарный. Код не в продакшне, разумеется :-D
Уже поправил в статье. Спасибо, что указали.
Включаю Visual Studio, потом Kaspersky Password Manager, что-то в нём делаю, затем тыкаю в редактор исходного кода в VS и, вуаля, она падает. А всё потому что где-то был захвачен некий глобальный хук или что-то подобное, а исключение, которое полезло никто не поймал. В 99%, когда программа падает я вижу, что нет ни одной причины по которой она не могла бы спокойно продолжить работать. Даже если предположить, что сейчас мне некоторая фича недоступна, то зачем гасить всё приложение?
1. Каким образом вы становитесь уверенными с помощью статического анализа в том, что исключение не пройдёт глубже слоя VM?
2. Что будет, если кто-то добавил новый тип исключения в глубине кода и не предупредил или забыл предупредить, что в системе теперь есть новый тип исключения?
Можете прокомментировать этот комментарий на схожу тему? Это второй вопрос. Тема крайне интересная и до конца не понятая, как мне кажется.
А вы там не найдёте всех возможных исключений. Даже половины. Так что же ловить? :)
Если бы File.Open делал я, то я бы поймал все исключения во ViewModel, вывел сообщение пользователю о том, что беда с открытием файла. И фильтранул на OutOfmemory (это сначала и если это не оно, то вывел бы сообщение просто).
А вы там не найдёте всех возможных исключений. Даже половины. Так что же ловить? :)