c#3层win表单应用程序中的异常处理

Fun*_*nky 0 c# exception-handling n-tier-architecture

我有一个3层win表单应用程序,它有一个UI,BLL和DAL.我想添加一个异常处理程序,它将DAL中的异常一直抛到UI,以便用户知道错误是什么.我已尝试使用try {} catch {}并将其从DAL中抛出,但这只会将其抛出到BLL并停在那里.有没有办法把它扔回UI?

谢谢

编辑:

码:

http://pastebin.com/V75MDWdm

Mat*_*vey 7

每个层都应该将异常包装在稍微抽象的异常中.

例如,进行简单的客户登录操作:

  • 尝试加载"客户"记录时,DAL会抛出"RecordNotFound"异常.
  • BLL捕获它,并将其包装在"InvalidLogonRequest"异常中,表示未找到客户记录.
  • GUI捕获该信息,并向用户显示错误消息,指出"客户"不存在.

UI下面的每一层都不一定知道正在进行的操作的更广泛的上下文,因此由上面的层提供关于出错的更多上下文信息...

也许一个更好的例子是cusomer注册操作:

  • DAL在电子邮件地址列上抛出sql"UniqueConstraintException".
    • DAL也许不知道这是一个注册过程,它只知道它正在对客户表进行INSERT ...
  • BLL捕捉到了这一点,并引发了"EmailAlreadyExists"异常.
  • GUI捕获该消息并向用户显示消息"已经采用了电子邮件地址"