System.Web.HttpContext.Current.Server.Session,Mappath,ResoveUrl等等,在asp.net项目中很常用。但是,在三层或多层结构中,System.Web.HttpContext.Current是否应该出现在业务层呢??这些到底是UI层还是业务层的东西呢?看上去这些似乎是和业务密切相关的,是业务层吗?但其namespace叫“system.web”,事实上如果要把程序改为winform,那他们用不了,这样看来应该是属于UI层吧?迷茫中。

解决方案 »

  1.   

    问题已经说清楚了,代码没必要贴了。
    您的意思是Session,mappath这些绝不应该出现在bll层是吗
      

  2.   

    举个简单例子,业务层的用户类有一个属性,判断用户是否已登陆,使用Session是否存在判断,那以下写法是否规范呢?这个类是业务层的,Session是UI层的。。下层调用了上层。。Public bool IsLogin {
     get {
    return Session["xxx"]!=null;
    }
    }
      

  3.   

    直接用不了Session的时候,自然就用这个System.Web.HttpContext.Current引用了
      

  4.   


    不应该在业务层判断用户是否登录的可以在UI层写个UserHelper类 里面有个方法IsLogin
    就可以了
      

  5.   

    是否登录只是个例子,那如果session保存的是一个和业务相关的数据呢?难道也在UI层获取才传入BLL?
      

  6.   

    强烈不建议 你单元测试了就郁闷了 没有httpcontext供你用
      

  7.   

    强烈不建议 你单元测试了就郁闷了 没有httpcontext供你用还是可以模拟出来的ps:不建议使用,bll层封装的应该是逻辑,session的值(例如System.Web.HttpContext.Current.user.name)这个值应该在调用bll前,传入小项目不必要纠结
      

  8.   

    我的意见恰恰相反。强烈建议LZ不要死磕字面意思。这个session,应该放在BLL层,而不是UI层。
    所谓BLL,其实并非指的仅仅是你所做项目所针对的公司业务,这个“业务层”所指的其实更多的是你的网站项目的“业务层”,包括很多的数据流。换句话讲,就好比MVC中的“Model,View,Control”中的Control,难道说Control中仅仅只能包含公司业务吗?既然使用了3层开发,对于类似Session这种非常特殊又关键的东西来说,其实我觉得,更多的是应该放在BLL内,而不是UI中,UI就好比View,更多的是应该关注如何把数据绑定后显示出来。
      

  9.   

    楼上别误导人,既然叫“业务层”,就绝不能出现UI层的东西,不然分层还有什么意义?楼主最后一句说的很明白了:
    楼主举的例子 IsLogin,并不是核心的业务逻辑,而是一般性的身份验证,这是应用层的事情,有时候我们也在UI层完成它,比如,我们经常使用 Forms 身份验证实现网站的登录。这个时候要心中有数,才不会在把UI转到 winform 的时候手忙脚乱
      

  10.   

    更正一下,
    Model:描述业务逻辑
    Control:创建视图,更新视图,更新Model
      

  11.   

    回答楼主:
    System.Web.HttpContext.Current不应出现在业务逻辑层,
    可以出现在基于asp.net的ViewModel和ViewController中,
    通过ViewController来更新业务逻辑层的BusinessModel
    (注意:不是DataModel,比如User.IsLogin或者Customer.Name这样的东西)在构建分层体系之前,应该明确每层的职责,价值取向是:
    1.保持尽量短的驱动链;
    2.细化分层,分出尽量多的层;
    3.MVC设计模式具备以上2种特征,可以分出N层,却保持恒定2级驱动
    也就是说,MVC不仅仅是三层的,可以是N多层,却始终保持最短的驱动链
      

  12.   

    一点点相关:
    http://www.cnblogs.com/insus/articles/1951899.html
      

  13.   

    缪军:最短的驱动链,是不是指----以传统的3层为例----UI 层只能访问 BLL 层,而不应访问 DAL 层?
      

  14.   

    在我的理解,UI层指的是像html,frm,显示器之类的输出设备,
    这一层是"死"的,不应该有任何和具体应用程序相关的东西,
    UI层只是被动的接受控制,
    它不晓得什么BLL或者DAL又或者是Controller其实,你仔细看一下asp.net,微软给你的那个html设计器,其实是假的,
    你根本就没有直接接触到html,而是完全100%的通过asp.net代理人渲染的html,
    这就是MVC,
    巧妙的是,你可以无限的叠加和嵌套这种模式
    这种设计思想已经有1000年的历史,在其他领域数不胜数
      

  15.   

    microtry 帮我看看我得问题吧
      

  16.   

    说法不一,高手出来总结一下吧。
    强调一下,环境是webform,而不是MVC
      

  17.   

    不应该这样写,
    1.用户是否登录怎么能通过session来进行判断,
    2.bll层处理的是业务逻辑,不应该在业务逻辑层判断用户是否登录,可以在需要该状态的地方,增加状态参数。
      

  18.   


    我21楼已经说了,webform本身就是MVC的