bll层,又叫业务逻辑层,顾名思义,就是放置业务逻辑的地方 举个简单的例子,饭店的优惠方案,满100元就打9折,不满100不打折 web页面提供文本框等让员工输入金额,然后调用bll层的方法; 那bll层就是检查金额是否满100,再把实际金额调用dal层存入数据库; dal就是把金额插入数据库,不检查
这样,如果哪天优惠方案变了,只要修改bll,重新编译bll,而别的地方不用动
之所以现在很多bll就一个简单的引用dal,1是因为作示例,没啥业务 2是写的不规范
另外要说的是:三层架构主要是用于团队开发,便于分工,比如张三做业务逻辑,他就不用去关心数据库类型结构等信息;李四做dal,他就不用关心业务逻辑;只要定义好bll和dal的接口就可以了 如果只是个人开发,或者比较简单的业务,用三层是浪费时间 现在网上很多代码都是为了分层而分层,是否要分层,要根据项目的具体情况而定,不能一一概而论。
---------------------------------------------------------------------------------------------------------------------------
比如一个网站做了一个 注册或是 登陆! 在 DAL 层呢 不去做 任何的 判断(登陆的用户名存在几个 ? 注册的信息 会不会对数据库 有安全方面的影响啊!!等等... 我们就可以吧这些 判断的 属于 业务逻辑性的东西 放在 BLL) 这样DAL 只管 和数据库的交互! 运行速度 会快点吧? 啊?是不是?没错吧?哈? 虽然 你看的项目 BLL 层没写什么东西!但是那一样是一个好的习惯! 而且易于扩展!
----------------------------------------------------------------------------------------------------------------------------
其实我们刚看三层的时候,BLL都是用来传递数据的,从表现层传过来参数,然后什么都没做,直接扔DAL去查询数据库,所以,我们都觉得BLL层不好用,我一开始也是这么觉得 但是吧,既然要求是这样,那就肯定有他的作用,其实,在小项目中,BLL确实没有用,不过,你要做个比较大的项目,不是单纯的查数据库,然后直接把数据库查出来的表直接显示在表现层上,而是你需要把查询出来的数据经过一下处理,比如百度贴吧的时间显示,当是当天的话,显示几点几分,当时好几天以前的,显示日期,而在数据库里,存的都是完整的日期,这样,这个时间的处理代码,你就可以方在BLL中处理,处理完了再返回给表现层
C/S结构开发框架中BLL层的作用
所谓的三层开发就是将系统的整个业务应用划分为表示层,业务逻辑层和数据访问层,这样有利于系统的开发、维护、部署和扩展。
分层是为了实现“高内聚,低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,延展和分配资源。
如下图所示
业务逻辑层用于做一些有效性验证的工作,以更好的保证程序运行的健壮性。如完成数据添加、修改和查询业务等;不允许指定的文本框中输入空字符串,数据格式是否正确以及数据类型验证;用户权限的合法性判断等;通过以上的诸多判断以决定是否将操作继续向后传递,尽量保证程序的正常运行。
业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。例如Martin Fowler在《Patterns of Enterprise Application Architecture》一书中,将整个架构分为三个主要的层:表示层、领域层和数据源层。作为领域驱动设计的先驱Eric Evans,对业务逻辑层作了更细致地划分,细分为应用层与领域层,通过分层进一步将领域逻辑与领域逻辑的解决方案分离。
业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。
因没有很好的规范逻辑层所以很多人把BLL说成是DAL(Data Access Layer,数据访问层)和UI(User Interface)层的连接桥梁或中转站.
既然称作业务层必然有他的用处,不仅仅是一个中转的功能.比如要创建一个用户,可以用以下的逻辑表示:
/// <summary> /// 用户管理的业务逻辑层 /// </summary> public class User_BLL { /// <summary> /// 增加用户 /// </summary> /// <param name="instance">用户实例</param> /// <returns></returns> bool AddUser(User instance) { if (this.Validate(instance) == false) return false; return _DAL.AddUser(instance); } /// <summary> /// 用户资料合法性检查 /// </summary> /// <param name="instance">用户实例</param> /// <returns></returns> private bool Validate(User instance) { if (instance.UserID == "") throw new Exception("用户编号不能为空!"); if (instance.UserUser == "") throw new Exception("用户名称不能为空!"); if (_DAL.Exists(instance.UserID)) throw new Exception("用户名已经存在"); return true; } }
但是在大部分处理情况在开发环境中没有严格要求的, 我们往往习惯把这些检查代码放在UI层,其实是不对的,因为没有分离逻辑代码使UI层臃肿而BLL层的代码很少, 从而造就了BLL层看起来就是一个中转站的错觉.
【转载】http://blog.csdn.net/huangcao5674/article/details/7834358