【分享|转贴】三层结构中的错误处理

NqIceCoffee 2007-10-04 07:59:41
异常可以分为系统异常(如网络突然断开)和业务异常(如用户的输入值超出最大范围),业务异常必须被

转化为业务执行的结果。
1.DataAccess层不得向上层隐藏任何异常(该层抛出的异常几乎都是系统异常)。
2.要明确区分业务执行的结果和系统异常。比如验证用户的合法性,如果对应的用户ID不存在,不应该抛出

异常,而是返回(或通过out参数)一个表示验证结果的枚举值,这属于业务执行的结果。但是,如果在从数

据库中提取用户信息时,数据库连接突然断开,则应该抛出系统异常。
3.在有些情况下,BL层应根据业务的需要捕获某些系统异常,并将其转化为业务执行的结果。比如,某个业

务要求试探指定的数据库是否可连接,这时BL就需要将数据库连接失败的系统异常转换为业务执行的结果。
4.UI层(包括Service层)除了从调用BL层的API获取的返回值来查看业务的执行结果外,还需要截获所有的系

统异常,并将其解释为友好的错误信息呈现给用户。


原地址:http://www.cnblogs.com/zhuweisky/archive/2007/04/02/697195.html

欢迎大家踊跃发言,谈谈自己在项目中的做法.
...全文
221 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
NqIceCoffee 2007-10-07
  • 打赏
  • 举报
回复
支持16楼的说法

终于找到我要的答案了
SDFDSAC 2007-10-07
  • 打赏
  • 举报
回复
:)
NqIceCoffee 2007-10-06
  • 打赏
  • 举报
回复
这么快就沉了?
LoveCherry 2007-10-06
  • 打赏
  • 举报
回复
很好,不管怎么样,即使要把系统异常转化为业务异常,也要记得把异常信息记录下来。
如果单纯try catch还不如什么都不做,让异常上跑到表现层,使用customError把用户转到统一出错页面
并且通过httpModule插件形式记录所有未处理异常,每天看看各大网站有没有什么异常一来可以修复BUG而来可以看是不是有人在捣乱

比如

public class ExceptionModule : IHttpModule
{
#region IHttpModule 成员

public void Init(HttpApplication application)
{
application.Error += new EventHandler(OnError);
}

public void Dispose()
{

}

#endregion

/// <summary>
/// 错误处理
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
public void OnError(object sender, EventArgs args)
{
HttpApplication application = (HttpApplication)sender;
te_ExceptionLog log = GetExceptionLog(application.Server.GetLastError(), application.Context);
string ExceptionProcessWay = ConfigurationManager.AppSettings["ExceptionProcessWay"];
IExceptionProcess server = (IExceptionProcess)Activator.GetObject(typeof(IExceptionProcess), ConfigurationManager.AppSettings["ETSRemotingURL"].ToString());

server.LogException(log, ExceptionProcessWay);
}

kings2015 2007-10-05
  • 打赏
  • 举报
回复
三层架构 忘得差不多了 有复习了下 帮顶了
octverve 2007-10-05
  • 打赏
  • 举报
回复
如果是个人的项目,想怎么都行。如果是公司项目,宝玉那个也够用了。难道这也弄个统一标准??
jiangshaofen 2007-10-05
  • 打赏
  • 举报
回复
9楼兄弟,可能我说得不周全,谢谢指点.个人理解:
原则上在代码中只抛出异常,不捕获和处理异常,异常的处理由平台提供的ExceptionHandler统一处理,并在UI层由BasPage中捕获。
以下情况下需要进行异常的捕获和处理:
 1.对于影响业务流程的异常处理,由详细设计时明确指出异常的处理原则
 2.对于显式的事务处理中的异常需要捕获,需要回滚事务并决定是否重新抛出异常信息
 3.在UI层需要特殊显示的异常可以在页面中捕获进行提示
我在地球 2007-10-05
  • 打赏
  • 举报
回复
学习
gui0605 2007-10-04
  • 打赏
  • 举报
回复
up
NqIceCoffee 2007-10-04
  • 打赏
  • 举报
回复
8楼的,你开玩笑的吧

UI不处理异常,哪处理?
jiangshaofen 2007-10-04
  • 打赏
  • 举报
回复
不完全赞同其上观点.例如4.UI层原则上不该捕获任何异常.本研发部(CMM5)为公司提供的开发框架文档对此有专门解释.
NqIceCoffee 2007-10-04
  • 打赏
  • 举报
回复
宝玉关于Asp.Net Forums中的自定义异常类的文章地址:

http://blog.joycode.com/dotey/archive/2005/01/20/43363.aspx
qyhxx 2007-10-04
  • 打赏
  • 举报
回复
还好吧,有点明白!
wuyi8808 2007-10-04
  • 打赏
  • 举报
回复
mark
SDFDSAC 2007-10-04
  • 打赏
  • 举报
回复
:)
NqIceCoffee 2007-10-04
  • 打赏
  • 举报
回复
感觉上

http://www.cnblogs.com/inrie/archive/2005/11/07/270723.html

这个方案好象更可行
Rudolph 2007-10-04
  • 打赏
  • 举报
回复
正迷糊这个呢,好好看看~~~
pupstar 2007-10-04
  • 打赏
  • 举报
回复
我自己写个方法!放到dll中调用。http://data.v5star.com

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧