DAL,IDAL,BLL,Factory作用

业务逻辑层(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) == 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;
   }
}

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

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

【转载】http://blog.csdn.net/huangcao5674/article/details/7834358

时间: 2024-12-28 19:01:54

DAL,IDAL,BLL,Factory作用的相关文章

关于在.NET中 DAL+IDAL+Model+BLL+Web

其实三层架构是一个程序最基本的 在.Net开发中通常是多层开发比如说    BLL 就是business Logic laywer(业务逻辑层) 他只负责向数据提供者也就是DAL调用数据 然后传递给 客户程序也就是UI    DAL就是(data access laywer)数据访问层 ,负责 对实体也就是数据库相应表的增删改查    IDAL它体现了“抽象”的精神,或者说是“面向接口编程”的最佳体现.抽象的接口模块(IDAL)    Model: 实体层数据库中表的映射,一般有几个表就有几个实

ASP.NET的三层架构(DAL,BLL,UI)

BLL 是业务逻辑层 Business Logic Layer DAL 是数据访问层 Data Access Layer ASP.NET的三层架构(DAL,BLL,UI) 图形表示三层结构. 其中web即为USL层 web –> bll –> dal | | | | V | +–> model <-+ 一.三层体系架构 1.表示层(USL):主要表示WEB方式,也可以表示成WINFORM方式.如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务. 2.业务逻

asp.net 编写代码流程(bll contract dal)里面添加代码

代码编写流程 1.DALWebService文件夹下,处理数据获取接口 --数据库访问的代码主要在MrtmClass项目下,矿山简介和许可证信息的webservice接口是已有的 这里了解下相关业务的字段信息即可. 2.Mrs文件夹下,处理Web后端数据接口 --按顺序在model.ibll.dal.bll四个部分添加代码,model和ibll在contract后缀的项目里 这里按照前端显示需要,把要用到的字段,建立model,然后做个查询的bll接口和实现. 矿山简介和许可证信息只要有查询的接

第2章 简单工厂模式(Sample Factory)

原文 第2章 简单工厂模式(Sample Factory) 一般用到的场景:对象多次被实例引用,切有可能会发生变化 拿我们的简单三层举例子 先定义dal层 1 2 3 4 5 6 7 8     class Dal     {         public void Delete()         {           //...          }             } 工厂类 1 2 3 4 5 6 7 8 9 10     class Factory     {        

企业级应用框架(二)三层架构之数据访问层的封装与抽象

接上一篇我们来对数据访问层进行封装与抽象.在上一篇我们知道,要解除BLL对DAL的依赖,我们就必须抽象出DAL层的接口,同时基于DAL的数据访问技术很多,如EF,ADO.NET,LINQ TO SQL,因此,我们的数据访问层必须对这些技术提供相应的支持.所以今天我们要做的事情有两件,第一,定义我们的数据访问层接口:第二,屏蔽各类数据库访问技术的差异,提供统一的数据库访问模型.举个例子,我们只需要修改一下我们的配置文件,就能够把ADO.NET的实现方式,改变成EF的实现方式.好下面搭建我们的三层构

新闻公布系统 (Asp.net 三层架构 )

2012年度课程设计---新闻公布系统(小结) -----Presented By [email protected] Tips:因本课程设计大部分代码皆有本人短时间仓促码成,界面恶心,代码丑陋.唯一长处便是:        所有代码都已贴上,而且所有都已凝视.另外与Asp.net教程结合恰当,通俗易懂,easy上手. 需求 新闻公布系统需求III NewsPublish(简称NP) 功能说明 本项目用于对新闻公布进行管理. 1.查看新闻 全部新闻按时间按降序排列: 用户登录后在自己主页能够查看

C#三层架构详细解剖

深入浅出C#三层架构(转) 本文用一个示例来介绍如何建设一个三层架构的项目,并说明项目中各个文件所处的层次与作用.写本文的目的,不是为了说明自己的这个方法有多对,而是希望给那些初学三层架构却不知从何入手的朋友提供一点帮助.因为网上的文章,大多是注重理论的介绍,而忽略了具体的实践应用,或者有示例但讲得不透彻.导致看了之后,理论上又学习了一遍,但还是不知道代码怎么写.所以想从这个方面入手写一下,让从来没做过三层架构的初学者也能照猫画虎,写出代码来.文中的代码是伪代码,仅用来阐明思路.    正文:

ASP.NET三层架构的分析

BLL   是业务逻辑层   Business   Logic   Layer DAL   是数据访问层   Data   Access   Layer ASP.NET的三层架构(DAL,BLL,UI) 图形表示三层结构. 其中web即为USL层 web –> bll –> dal|           |          ||           V          |+–> model <—+ 一.三层体系架构 1.表示层(USL):主要表示WEB方式,也可以表示成WINF

打破传统三层架构,实现六层架构

版权声明:本文为博主原创文章,未经博主允许不得转载. 前言:对于一个项目的实现,往往都是,产品需求分析,产品设计,UI设计,数据库设计,后台编码,前端页面,各种测试,发布产品: 这个产品是我个人利用闲暇时间做着玩,包括网站,以及后台管理系统:额外说一句,前端页面是在网上下的模板,个人对前端不算精通.从产品分析到设计,以及数据库建立还有框架的搭建,我只花了2天时间,当然,这是个小网站,表的设计没有很多只有4-5张: 废话不多说了! 整个产品架构采用6层架构,主要目的是减少每层之间的耦合度以及依赖性