BLL怎么跟UI层交互呢!最近看到有一种是BLL抛异常以及UI层捕获异常的!因为我在UI层不想写太多的代码!把所有的逻辑代码都BLL层来写!而我又不想像以前那种BLL返回一个常数然后在UI层来写所对应的信息!要是用BLL抛异常则会造成UI层每个事件操作都要TRY{}一次?这样在性能上可能会造成很大的影响?大家怎么写的?可以直接把BLL层的信息返回UI层?要是用BLL抛异常UI层去TRY怎么写会比较好的?或者说大家有什么更好的方法啊!

解决方案 »

  1.   

    要知道,对于 UI 层来说,BLL 层只是为它提供支持的一种基础设施
    就像 TCP/IP 协议为 HTTP 协议提供支持因此 BLL 层实际上是不需要与 UI 层交互的
    确实是这样的,它的作用只是按 UI 层的要求为其提供经包装的数据,或者,引发异常
    你提到的从 BLL 返回一个常数,然后UI层来显示信息……实际上是没必要的。
    .NET 推荐使用强类型的对象,比如枚举等。
    至于从代码到自然语言的转化,这工作可以放到 UI 层来做:UI 就是用来做这项工作的;此外这还给 UI 提供了一定的自由(比如如果用户未登录,那提示语可以随时从“未知用户”改为“You are not identified”)。
    不用太多的 try..catch
    组织良好的程序里只有 在能明确意识到可能会出错的地方 才用 try..catch(如文件读取、数据库连接等),而且在这些位置应该使用异常捕获处理。那么基于这个逻辑,在其他不能明确意识到可能出现异常的位置,如果出现异常就意味着不合理。运行时异常甚至意味着程序有问题。
    所以我建议尽可能地让异常暴露出来;如果没有必要,不要用 try..catch,这有助于(在测试中)发现问题。运行时,可以处理 ASP.NET 的 Application_Error 全局事件。
      

  2.   

    bll逻辑层的代码就是为了简便ui的编码
      

  3.   

    所有UI一下的层面不处理异常,该怎样就怎样。  UI层统一try...catch处理异常(只在必要的地方),然后显示异常信息或写入日志
      

  4.   

    统一异常处理就行了 Global.asax文件内面的    void Application_Error(object sender, EventArgs e) 
        { 
            //在出现未处理的错误时运行的代码
            //使用Transfer(),保留当前上下文
            Server.Transfer("~/Error.aspx");
        }
      

  5.   

    统一异常处理就行了 Global.asax文件内面的    void Application_Error(object sender, EventArgs e) 
        { 
            //在出现未处理的错误时运行的代码
            //使用Transfer(),保留当前上下文
            Server.Transfer("~/Error.aspx");
        }