Образец бестселлеров в MVVMcross обрабатывает ошибки с использованием двух основных методов:
1. Классы BaseViewModel для общей обработки ошибок: образцы бестселлеров используют класс BaseViewModel` для инкапсуляции общего кода, включая механизмы обработки ошибок. Этот подход позволяет централизованному управлению общей логикой обработки ошибок в разных моделях представления. Например, метод `generalAsyncload` определяется в` baseviewmodel` и используется различными моделями представления для асинхронной загрузки данных. Этот метод может включать в себя логику обработки ошибок, которая распространяется по всему приложению.
2. Маршрутизатор ошибки на уровне приложения: в образе также используется «маршрутизатор ошибки на уровне приложения», чтобы управлять тем, как ошибки распространяются из моделей просмотра в пользовательский интерфейс. Это включает в себя использование инъецированного объекта, обычно «IerrorReporter», который инициализируется как синглтон во время построения приложений. Каждый проект пользовательского интерфейса, специфичный для платформы, подписывается на события из этого Синглтона, используя интерфейс `ierrorSource '. Эта настройка позволяет механизмы отображения ошибок в специфике для платформы, такие как uialertviews на iOS или тостах на Android, что позволяет каждой платформе обрабатывать ошибки таким образом, чтобы они были родными для ее среды.
На практике, когда возникает ошибка во время асинхронной операции, такой как загрузка данных из веб -службы, ошибка поймается и сообщается об использовании «IerrorReporter». Это позволяет приложению отображать удобные сообщения об ошибках или предпринять альтернативные действия, такие как повторение операции или загрузка автономных данных.
Например, если `CategoryListViewModel` встречается с ошибкой при загрузке категорий, он может использовать метод` generalAsyncload` из `baseviewmodel` для обработки ошибки. Затем ошибка сообщается через `ierrorReporter`, который запускает соответствующее уведомление пользовательского интерфейса на основе платформы.
Этот подход гарантирует, что обработка ошибок является централизованной и гибкой, что позволяет легко адаптировать к различным платформам и сценариям в рамках MVVMcross.
Цитаты:[1] http://slodge.blogspot.com/2012/05/one-pattern-for-error-handling-in.html
[2] https://leaware.com/creating cross-platform-xamarin-applications-using-the-mvvmcross-framework/
[3] https://asktom.oracle.com/ords/f?p=100%3A11%3A%3A%3A%3A%3AP11_question_id%3A1422998100346727312
[4] https://stackoverflow.com/questions/10411352/what-is-the-suggested-way-to-handle-exceptions duging-in-a-mvvmcross-application
[5] https://github.com/mvvmcross/mvvmcross-samples/blob/master/oldsamples/bestsellers/bestsellers.touch/appdelegate.cs
[6] https://discourse.getdbt.com/t/how-to-handle-test-faulures/3824
[7] https://www.telerik.com/blogs/blazor-best-practices-handling-errors
[8] https://stackoverflow.com/questions/15697523/running-sample-projects-in-mvvmcross-v3-hot-tuna
[9] https://visualstumagazine.com/articles/2018/05/08/build-a-xamarin.forms-application.aspx