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
- What is this namespace ITypeOfObjectsBoundToListBox ? Couldn't find it
- How to Require Confirmation on Form Close When there is Changed Data in a DataGridView
- self updating drawings C#
- Missingmanifestresourseexeption in auto genereted code of ImageList
- Child form implement in C# Winform
- Cannot find InvalidCastException in C# Application
- some labels appear gray in Visual Studio 2010
- c# richtextbox search with 2 forms
- Menu out of place when application is in full screen by Windows API
- How to access the Index of a changed Selection in a Datagridview
- showing a black transparent box over picturebox with an Image
- how to deselect all in RichTextBox before selecting newly found text?
- How to remove white space between border and BackColor?
- Validation DataGridView Windows Forms
- Invoke of a UserControl doesn't work
Related Questions in MODEL-VIEW-CONTROLLER
- WebApi: Reading errors
- i want to create a service that does the login functionality?
- What is the point of the name method in the symfony2 annotation?
- Is it recommended to use Node.js for an online room booking web application?
- CodeIgniter - How to get a list of all my controllers dynamically?
- MVC WPF DataContext for two UserControls
- Is bootstrap file a controller?
- PHP/Zend Framework 2 - Unable to display table field values within dynamically generated table
- Laravel MVC application structure on UML class diagram
- Select2 using Ajax (multi select) - when selecting second one first one disappars
- How to only let correct_user create or destroy?
- Google OAuth 2.0 .NET
- How to Minitest Controller :create action with Paperclip Validators
- Cannot get FullCalendar to work (Laravel 5)
- Enable/ Disable different sets of Controllers in based on mode specified at startup Spring MVC
Related Questions in MVVM
- How can I fit "ol.Map" to "Ext.panel.Panel"?
- How to not open the same Popup WPF MVVM?
- How to set data context of ViewModela View's xaml?
- Asynchronous MVVM commands
- Proper MVVM ViewModel and Model pattern
- Modeling an XML hierarchy for traversal with MVVM
- Ext JS 5 Data Binding Combobox
- Combobox and IDataErrorInfo
- Change default error message when enter non digit in a textbox requires integer
- MVVM: Updating ViewModel properties based on Model properties
- Problems related to View Models created from XAML
- Cant bind enum to combobox wpf mvvm
- RadioButtons binding on Windows Phone 8.1
- Cascading Comboboxes WPF mvvm and EF
- Update DataGrid cell if other cell changes
Related Questions in ERROR-HANDLING
- Application is missing a default group leaderboard (ItunesConnect error)
- jQuery Ajax Uncaught TypeError: Cannot use 'in' operator to search
- Error return from the pooledBin function (R package binGroup) depending on the method of confidence interval calculation
- How to determine data point that gives error?
- Facelets error page works during ajax request with FullAjaxExceptionHandler, but does not evaluate EL during synchronous request
- why ajax error is different in IE and Chrome?
- Unexceptional exceptions
- What is the difference between Swift 2.0 do-try-catch and regular Java/C#/C++ exceptions
- how to fix error when url is directly entered with no search keywords?
- Errors Handling in WCF - how to pass the error to client as well as remain the channel in the "Open" state
- Ignoring User Exists Error in Oracle
- error for displayed even it has not been submitted yet
- Error handling using poller
- register_shutdown_function with error 500
- Eclipse error parser ignores template "call stack"
Related Questions in WEBFORMSMVP
- Can I create View and Presenter in different Project in MVP Pattern
- Do I need service layers as well?
- Unknown server tag in webformsmvp
- How to iterate thru collection in model to an unordered list?
- How should I unit test my WebFormMVP Presenters with Moq'd Views when using the Supervising Controller Pattern
- WebformsMVP Implement a Ninject IPresenterFactory
- Repository Pattern with Linq to SQL in WebFormsMVP
- How do I handle postback in usercontrol from button click on MasterPage
- Managing ViewState in WebFormsMVP
- ASP.NET WebFormsMVP PageDataSource Events Executing Twice For Unknown Reason
- Does anyone have an insight into ASP.NET WebFormsMVP?
- MVP ADVANTAGES OVER THREE TIER ARCHITECTURE
- Where to put View logic in MVP?
- In Webforms MVP (ASP.NET), who should set the data of dynamically created usercontrol, view or presenter?
- MVP pattern - design question
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 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. :)