当我查看.NET Framework中的方法时,它可能会抛出几个可能的异常。
从规划的角度来看,我需要提出什么来规划和处理这些例外情况?我理解,根据异常的影响,这将影响在UI层中显示它。例如,如果后端对用户体验不透明的进程会抛出异常,那么您不希望向用户显示该进程,因为他/她不知道那是什么。
由于
答案 0 :(得分:0)
您的应用程序中通常有一个业务逻辑层,您可以在安全调用中将该方法包装在该库中。这些方法甚至可以说出它们可以抛出的异常,如果你愿意的话,你可能希望以独特的方式处理这些异常。
以下是一些可以处理意外和自定义异常的类的示例:
class Program
{
static void Main(string[] args)
{
MethodInvokationResult result = SafeActionInvokator.HandleSafely(() =>
{
MyFakeBusinessEngine.DivideTwoNumbers(5, 0);
});
if (result.Exception is System.DivideByZeroException)
{
Debug.WriteLine($"A divide by zerp exception was caught");
}
else if (!result.Success)
{
Debug.WriteLine($"An unknown error occured.");
}
}
}
^你可以看到你可以包装调用并以合理的方式处理它们。
public class MethodInvokationResult
{
public bool Success { get; set; }
public Exception Exception { get; set; }
}
^一个简单的结果类
public static class MyFakeBusinessEngine
{
/// <summary>
/// Divides two numbers
/// </summary>
/// <param name="a">numerator</param>
/// <param name="b">denominator</param>
/// <returns>the result</returns>
/// <exception cref="System.DivideByZeroException">When b is zero, divide by zero exception is thrown.</exception>
public static int DivideTwoNumbers(int a, int b)
{
return a / b;
}
}
^一个记录良好的方法,甚至告诉其他开发人员它希望抛出什么异常
public static class SafeActionInvokator
{
/// <summary>
/// Executes a method, and if any exception is thrown, will log the error and swallow the exception.
/// </summary>
/// <param name="methodToExecute"></param>
public static MethodInvokationResult HandleSafely(Action methodToExecute)
{
try
{
methodToExecute.Invoke();
return new MethodInvokationResult()
{
Exception = null,
Success = true
};
}
catch (Exception ex)
{
Debug.WriteLine($"{ex}");
return new MethodInvokationResult()
{
Exception = ex,
Success = false
};
}
}
}
^您调用的方法的包装器,将其包装在try catch中允许您以相同的方式处理所有异常,或者将您想要的任何自定义逻辑放在那里。
这可以扩展为可以返回任何实际结果值的调用。您可以创建一个通用结果类,而不是我已经显示的简单结果类。
最后!至于你的实际问题,我会在整个应用程序中创建一些这些层,并重新抛出包含严重等级的任何异常。这些会传播到您的UI图层,您可以根据严重性选择要执行的操作。
甚至可能是这样的!
public class MajorException : Exception { }
public class MediumException : Exception { }
public class MinorException : Exception { }
public class UserError : Exception { }
希望这有帮助!
答案 1 :(得分:0)
我想把它写成评论,但是对于评论文本框来说是很长的......
有一些例外对于向用户显示很重要,因为他们可以自己处理,例如:文件名是非法的。
我发现有一些例外情况对于向用户显示很重要,因为他们(用户)将充当我的QA团队,例如:某些方法不会更新GUI,他们可能会得出他们的结论应该进一步报告,他们会告诉我异常,我会发现我的阵列超出界限......
例如,“他/他不知道那是什么”
:例如:
“如果后端的进程是不透明的,则抛出异常”。
我为自己保存的那些例外(在数据库中......)..
我总是提醒自己,与开发者相比,最终用户有不同的心理( - :
我希望我能以正确的方式理解你的问题。