Pet*_*hev 3 language-agnostic exception-handling layer
假设我们在业务层中有以下方法.告诉UI层出错的最佳做法是什么,并给出错误消息?该方法是否正常时返回一个空字符串,否则返回错误消息,或者它应该在包含捕获的异常的catch代码中抛出另一个异常?如果我们选择第二个变体,那么UI应该有另一个尝试,抓住哪个太多尝试,抓住可能.这是第一个变体的伪代码.
public String updateSomething()
{
try
{
//Begin transaction here
dataLayer.do1();
dataLayer.do2();
dataLayer.doN();
//Commit transaction code here
}
catch(Exception exc)
{
//Rollback transaction code here
return exc.message;
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的做法还是我应该在catch中抛出另一个异常(那么方法将是无效的)?
我喜欢从我的业务层返回标准合同到我的UI层.
它看起来像这样:
public class ServiceOperationResult<T>
{
public bool Successful
{
get;
set;
}
public ServiceErrorType ErrorType
{
get;
set;
}
public string ErrorMessage
{
get;
set;
}
public T ReturnData
{
get;
set;
}
}
Run Code Online (Sandbox Code Playgroud)
我使用泛型,以便每个服务都可以定义它发回的内容,标准错误标志告诉客户端应用程序发生了什么类型的错误(这些是元类型,如"内部错误","外部方错误","业务规则验证错误")然后应用程序可以以标准方式对这些错误类型做出反应.
例如,业务错误显示在红色错误标签中,而内部错误则重定向到错误页面(在Web应用程序中)或关闭表单(在Windows应用程序中)
我的宠物讨厌在网站上看到一个红色标签(我希望看到验证错误)并看到类似"数据库服务器拒绝您的连接"这样的风险,您只能使用字符串来返回错误数据.
| 归档时间: |
|
| 查看次数: |
770 次 |
| 最近记录: |