System.Web.HttpContext.Current.Server.Session,Mappath,ResoveUrl等等,在asp.net项目中很常用。但是,在三层或多层结构中,System.Web.HttpContext.Current是否应该出现在业务层呢??这些到底是UI层还是业务层的东西呢?看上去这些似乎是和业务密切相关的,是业务层吗?但其namespace叫“system.web”,事实上如果要把程序改为winform,那他们用不了,这样看来应该是属于UI层吧?迷茫中。
调试欢乐多
您的意思是Session,mappath这些绝不应该出现在bll层是吗
get {
return Session["xxx"]!=null;
}
}
不应该在业务层判断用户是否登录的可以在UI层写个UserHelper类 里面有个方法IsLogin
就可以了
所谓BLL,其实并非指的仅仅是你所做项目所针对的公司业务,这个“业务层”所指的其实更多的是你的网站项目的“业务层”,包括很多的数据流。换句话讲,就好比MVC中的“Model,View,Control”中的Control,难道说Control中仅仅只能包含公司业务吗?既然使用了3层开发,对于类似Session这种非常特殊又关键的东西来说,其实我觉得,更多的是应该放在BLL内,而不是UI中,UI就好比View,更多的是应该关注如何把数据绑定后显示出来。
楼主举的例子 IsLogin,并不是核心的业务逻辑,而是一般性的身份验证,这是应用层的事情,有时候我们也在UI层完成它,比如,我们经常使用 Forms 身份验证实现网站的登录。这个时候要心中有数,才不会在把UI转到 winform 的时候手忙脚乱
Model:描述业务逻辑
Control:创建视图,更新视图,更新Model
System.Web.HttpContext.Current不应出现在业务逻辑层,
可以出现在基于asp.net的ViewModel和ViewController中,
通过ViewController来更新业务逻辑层的BusinessModel
(注意:不是DataModel,比如User.IsLogin或者Customer.Name这样的东西)在构建分层体系之前,应该明确每层的职责,价值取向是:
1.保持尽量短的驱动链;
2.细化分层,分出尽量多的层;
3.MVC设计模式具备以上2种特征,可以分出N层,却保持恒定2级驱动
也就是说,MVC不仅仅是三层的,可以是N多层,却始终保持最短的驱动链
http://www.cnblogs.com/insus/articles/1951899.html
这一层是"死"的,不应该有任何和具体应用程序相关的东西,
UI层只是被动的接受控制,
它不晓得什么BLL或者DAL又或者是Controller其实,你仔细看一下asp.net,微软给你的那个html设计器,其实是假的,
你根本就没有直接接触到html,而是完全100%的通过asp.net代理人渲染的html,
这就是MVC,
巧妙的是,你可以无限的叠加和嵌套这种模式
这种设计思想已经有1000年的历史,在其他领域数不胜数
强调一下,环境是webform,而不是MVC
1.用户是否登录怎么能通过session来进行判断,
2.bll层处理的是业务逻辑,不应该在业务逻辑层判断用户是否登录,可以在需要该状态的地方,增加状态参数。
我21楼已经说了,webform本身就是MVC的