Собственная обработка / сбор пользовательских ошибок - PullRequest
0 голосов
/ 24 января 2019

Я не знаю, как реализовать запатентованную процедуру обработки пользовательских ошибок (подпрограммы / остановки алгоритма) или предупреждающих сообщений (подпрограмма / алгоритм может продолжаться) без использования исключений (т. Е. Failwith .... Стандартное исключение системы).

Пример: у меня есть модуль с рядом функций, который использует много входных данных для проверки и для расчета толщины компонента сосуда под давлением.

Процедура расчета является сложной, итеративной, и перед получением результата необходимо выполнить множество проверок, проверок, которые могут генерировать «определяемые пользователем ошибки», которые останавливают процедуру / процедуру / алгоритм, или генерировать «Предупреждающие сообщения», продолжающиеся на.

Мне нужно собрать эти Ошибки и Сообщения, которые будут показаны Пользователю в специальной форме (форма Wpf или Windows). Это позже в конце.

Примечание: каждый раз, когда я читаю книги F # или C # или Visual Basic или статью в Интернете, я обнаруживаю одну и ту же философию / предупреждение: повышение системного / пользовательского исключения должно быть максимально ограничено: исключение предназначены для неуправляемых исключительных событий (не предсказуемых) и вызывают «перегрузку» компьютерной системы.

Я не знаю, какую философию обработки реализовать. Я не совсем понимаю. Ограниченные источники доступны в Интернете по этому конкретному аргументу.

На самом деле я планирую принять эту Философию, взятую из: "https://fsharpforfunandprofit.com/posts/recipe-part2/". Звучит хорошо для меня, ... сложно, но хорошо. Никаких других ссылок, которые мне удалось найти, найти по этому актуальному аргументу .

Вопрос: Есть ли другие Философии, которые я могу рассмотреть, чтобы создать эту Собственную обработку / сбор пользовательских ошибок? Несколько книг для чтения или несколько статей?

Мое решение окажет большое влияние на то, как спроектировать и написать мой код (проблема разделения на несколько функций, генерация «мотора», который выполняется в функциях последовательности или затем компоновывается по-разному, в зависимости от результатов, где проверять ошибки. / Предупреждения, как хранить ошибки и предупреждающие сообщения, чтобы понять, что происходит или где «ошибки / предупреждения» генерируются и вызываются «какой функцией»?).

Большое спасибо заранее.

1 Ответ

0 голосов
/ 24 января 2019

Способ F # - максимально кодировать ошибки в типах.Простейшим примером является тип параметра, в котором вы бы вернули None, если операция завершилась неудачей, и Some value, если она прошла успешно.Удивительно, но очень часто этого достаточно!Если нет, то вы можете кодировать различные типы ошибок И «состояние» успеха в различимом объединении, например,

[<Measure>]
type psi

type VesselPressureResult =
    | PressureOk
    | WarningApproachingLimit
    | ErrorOverLimitBy of int<psi>

, и затем вы будете использовать сопоставление с образцом, чтобы «решить», что делать в каждом случае.Если вам нужно добавить больше вариантов, например, ErrorTooLow, то вы добавите это в DU, и тогда компилятор «расскажет» вам обо всех местах, где вам нужно исправить логику.

Вотидеальный источник с подробной информацией: https://fsharpforfunandprofit.com/series/designing-with-types.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...