i'm building an application using a pattern similar to the MVC. The situation is the next: in the context of the model making changes to the associated repository. If the change throw an exception what is the correct way to present the information about the error to the user? In the previous version of my program when i have spaguetti code organization (model, view, controller overlaped), launching a messagebox telling the user about the error wasn't weird because i was doing almost everything from the views. Now in this new version i want to do the things correctly, so i guess that is bad doing anything that has a visual representation in the model layer. Some time ago i ask what is the correct way to capture exceptions. The specific point i was refering was to scale up exceptions from an inner code to an upper layer vs capture them in the most upper layer. Almost all the response were that isnt a good approach scale exceptions(capture and throwing again to be captured by a responsable entity), and is better to capture in the most upper layer. So i have this conflict in my head. I was thinking that is inevitable to maintain the separation of concerns to scale up, but that is in conflict with those previous advices. How can i proceed?
How can i do Error Handling in a MVC/MVVM Windows Form app
558 Views Asked by mjsr At
1
There are 1 best solutions below
Related Questions in WINFORMS
- Musical chairs: How can an asynchronous task cancel a synchronous one in c#?
- TCP Client Losing Connection When Writing Data
- how check if printing content on new page
- Find what is writing to the Output window
- WinForms, event unable to subscribe from a custom class
- A cleaner way to approach the given output
- Working with panel and moving from the second form to the the panel
- Accurately placing multiple controls in a row programmatically with dynamic table layout panel
- How to find winform application in visual studio 2022?
- How to stop comments being included in C# release build .exe
- Why is the Blazor value not immediately being rendered after changing it?
- .NET 6 Winforms separate forms control pop up freezing when unfocused and using native Windows file transfer pop up
- How to Fix C# WinForms Application Not Loading correctly on Windows 11?
- Visual Studio edit view corrupt for xaml and Winforms design views
- How to solve the problem that dragged column in datagridview too slow or miss when AllowUserToOrderColumns = true
Related Questions in MODEL-VIEW-CONTROLLER
- Getting POST 500 Internal server error while sending request via ajax call
- ASP.NET Core - Change Url of Product Details when select Color
- How to execute functions from different classes in a Model-View-Controller (MVC) architecture pattern?
- How to reroute role based user after login
- Error Connecting to a remote Windows MYSQL Windows server using Windows ASP.NET
- InvalidOperationException: Unable to resolve service for type 'Microsoft.Identity.Abstractions.IDownstreamApi'
- Create REST API Endpoints from an Existing PHP CodeIgniter Project
- Issue with Accessing Endpoints after Separating Controller Classes in Spring Boot
- C# MVC net.7 Application goes in time out
- In my .net core 8 mvc c# project, when I click on the category, the data comes as null listing the products in the relevant category
- Why do I get 500 error on Azure after using ViewBag?
- The jquery script function is not triggering in _layout.cshtml page while child page is loaded in ajax
- How to structure frontend on a Vanilla JS app on Symfony
- About Flutter MVVM Architecture with GetX
- How to join tables from multiple dbcontexts in one ViewModel?
Related Questions in MVVM
- TelephonyCallback.CallStateListener with LiveData and ViewModel
- Jetpack compose - how I can hookup LiveData property from ViewModel with TextField in activity?
- Jetpack compose ViewModels - should I have one ViewModel for different api calls?
- How to Display UserControl as SplitView Content? - Avalonia C#
- ViewModel property is empty even after initializing it
- How to bind to the DataContext ViewModel of another view?
- Problem updating the interface under MAUI to MVVM
- x:Bind a embeded page to the parent window viewmodel in WinUI 3
- RelayCommand not firing on MenuItem click inside DataGridTextColumn WPF MVVM
- WinUI3 CommunityToolkit MVVM Messenger calling on disposed objects?
- MAUI: How to update an observable property and wait for UI update completion before updating it again?
- Viewmodel as ILogEventSink in a Prism application
- How do I modify ViewModel data from button in swiftui
- Proper way to return value from custom UserControl's DependencyProperty and uses viewModel?
- .NET MAUI MVVM View Initialization doesn't work properly
Related Questions in ERROR-HANDLING
- Simple movie API request not showing up in the console log
- Sends a personalised error message from the back-end to the front-end with Nuxt-auth
- Creating Chrome extension, but display text from Javascript file is not showing up on HTML's display. The HTML is the InnerHTML of another HTML file
- How do I fix the response: Error in contrasts in R
- new to express & js and trying to understand next
- How to implement a Higher Order Component using TypeScript?
- symbol not found in flat namespace '__PyTrash_begin
- Handling multiple errors in Bison parser
- getting error 422 (Unprocessable entity) in a api-integration webapp
- Handling errors in MSAL Redirect - reactjs login with microsoft sso
- Node.JS getting error while building EXE with PKG module
- How do I display Supabase AuthApiError from server-side in client -side
- VBA dynamic feed multiple files into current one but error of "Run-rime error 7 out of memory" occurs
- How do I fix subscript out of bound error for my interaction matrices?
- pyinstaller' is not recognized as an internal or external command, operable program or batch file
Related Questions in WEBFORMSMVP
- this code takes a 2hrs to compare and sort 20,000 items each, is there a better way to write this c# code
- The MVP Pattern with presentation model
- Cannot add data to SQL Server Database from my ASP website form
- Model View Presenter project class gives null value
- ASP.NET : How to accept Monthly, Quarterly, Semi-Annual, Anually of Period of time using Dropdown using visual basic
- Where to put View logic in MVP?
- In the MVP pattern, is the presenter responsible for formatting numbers to percent?
- Can I create View and Presenter in different Project in MVP Pattern
- How to get a reference to a web form's ModelStateDictionary from inside a Web Forms MVP Presenter?
- Handling grid events in MVP pattern
- Where to write the server validations in MVP pattern
- In Webforms MVP (ASP.NET), who should set the data of dynamically created usercontrol, view or presenter?
- Unknown server tag in webformsmvp
- Do I need service layers as well?
- MVP ADVANTAGES OVER THREE TIER ARCHITECTURE
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
A common pattern is to have a generic place to put errors in your existing model.
One easy way to do this is to have your model classes all inherit from a base model class that has a property of type
IEnumerable<ErrorBase>, or some other type of your choosing.Then, in your presenter, you can check the error collection and display as necessary.
As far as having exceptions bubble up, the approach I use (almost regardless of what type of application I'm building) is to only handle exceptions at lower levels if you are going to do some special logging (like logging important local variables), or if you can do something intelligent with that exception. Otherwise, let it bubble.
At the layer right before your presenter (or web service class, or whatever), that's when you can capture your exceptions, do general logging, and wrap them (or replace them with) a "sanitized" exception. In the case of the UI, you just make sure you don't reveal sensitive data and perhaps display a friendly message if possible. For web services, you turn these into some kind of fault. Etc.
The upper most layers aren't "responsible" for the bubbled exceptions, they're simply responsible for making sure those don't show up to the end users (or web service client, or whatever) it a form you don't want them to... in other words, you're "presenting" them appropriately.
Remember, separation of concerns is a paradigm that you should follow as a rule of thumb, not an edict that owns all. Just like leaky abstractions, there are leaky paradigms. Do what makes sense and don't worry about it too much. :)