http://www.fullstackprep.dev/articles/webd/csharp/best-practices-for-exception-handling