DAL,IDAL,BLL,Factory作用

来源:互联网 发布:北京亚信智慧数据科技 编辑:程序博客网 时间:2024/06/05 20:19
业务逻辑层(BLL):主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理。如果说数据层是积木,那逻辑层就是对这些积木的搭建。

 数据访问层(DAL):主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层提供数据服务。

  (IDAL)它体现了“抽象”的精神,或者说是“面向接口编程”的最佳体现。抽象的接口模块IDAL
(Model)实体和数据库表映射类(Web)web网站项目。

并不是每个系统都要分层,一般只针对一些大型系统才采用分层,你看PetShop4,总共有22个项目。大体思想是3层,从Model,DAL,BLL,然后他在各层上又采用了工厂模式,把逻辑与实现想分离,比如以前BLL直接调用DAL就好了,但现在BLL却调用了IDAL,IDAL只是一个接口层,里面封状了要完成的一些业务逻辑,而具体的实现则交给DAL去实现,然后借助于工厂模式DALFactory和映射完成IDAL层中类的实例化。这样不管我们用的底层用的是什么数据库都可以完成BLL对DAL的调用。首先你不应该将那些SQL语句放在BLL层中,而应该是由DAL层来完成和数据库的交互。要想研究分层模式,PetShop4的确是一个相当好的例子,值得学习。

===========================================

=========================================================================================

=========================================

=======================================

Bll层作用

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) == falsereturn 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;
   }
}


// 来源:www.CSFramework.com, C/S结构框架学习网


但是在大部分处理情况在开发环境中没有严格要求的, 我们往往习惯把这些检查代码放在UI层,其实是不对的,因为没有分离逻辑代码使UI层臃肿而BLL层的代码很少, 从而造就了BLL层看起来就是一个中转站的错觉.

0 0