业务逻辑层(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层看起来就是一个中转站的错觉.

转载于:https://www.cnblogs.com/liyueting/p/6394289.html

DAL,IDAL,BLL,Factory作用相关推荐

  1. 知识点滴:持久层,DAO,API,DAL,BLL,DLL,csproj,sln

    知识点滴:持久层,DAO,API,DAL,BLL,DLL,csproj,sln 摘自: http://www.cnblogs.com/niuniu1985/archive/2009/12/10/162 ...

  2. java bll dal_实体框架DAL,BLL与存储库模式

    我正在尝试使用UI,BLL和DAL构建三层体系结构.我正在使用实体框架与存储库模式. 我的问题是:实体框架生成的实体是否应该作为我的BLL的一部分,还是仅仅是DAL对象? 提问的理由是因为它感觉就像我 ...

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

    BLL   是业务逻辑层   Business   Logic   Layer DAL   是数据访问层   Data   Access   Layer ASP.NET的三层架构(DAL,BLL,UI ...

  4. winform 三层(BLL.DAL.MODEL)

    数据库设计相当简单,就一个数据库然后又张存着用户名和密码的表. 数据库设计: 数据库名称:threeLayer 表: users 列:1.username 账号   2.password  密码 数据 ...

  5. 精简BLL业务层,使用范型复用常用方法

    首先DALFactory,需要增加一个类DALFactory2.cs //*-------------------------------------- //*  Create By Yesun .N ...

  6. ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发

    为什么80%的码农都做不了架构师?>>>    ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发          前言:本篇主要讲述数据访问层的开发, ...

  7. 使用ADO的通用DAL

    目录 介绍 概述 代码 连接字符串 实体和属性 EntityBase CanDbInsertAttribute对象 样本实体 DAL(数据访问层) BLL(业务逻辑层) 用法 最新的代码更正 结束 下 ...

  8. 三层架构之业务逻辑层(BLL)

    一.BLL :针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理. 1.模板: windows->类库 2. 引用: Model.DAL 3.原则:一个Service对应一个Man ...

  9. MVC,三层架构,工厂模型,七层

    三层: DAL,BLL,WEB(MODEL,SQLHELPER公共)(BLL层的作用是对数据进行加工和对方法进行组合的例如性别在数据库中是bit类型值只有0和1但是表示层要显示的是男和女,这就要在bl ...

最新文章

  1. html中::before 爬虫_反反爬虫系列(四)
  2. 并查集(浓缩的精华模版!!!!)
  3. Animate与transform的使用
  4. 【Power Automate】如何自动生成Word与PDF文件[上]
  5. 前端学习(2795):实现样式的左侧结构和样式
  6. 厨师刀行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  7. ora01017 linux,ORA-01017: invalid username/password; logon denied 解决办法
  8. Excel数据分析案例二——预测销售额
  9. jfreeChart生成报表
  10. 解决Mantis乱码问题
  11. Excel合并单元格中间插入斜杠和数字保留一位小数
  12. 百度senta使用方法
  13. 台式电脑电源接口介绍
  14. 微信小程序云开发使用mysql数据库
  15. Centos 7 开机一直转圈 提示failed to load SELinux policy freezing的解决方法
  16. python import random函数-Python代码中的“import random”是什么意思?
  17. [机器学习] 深入理解 目标函数,损失函数和代价函数
  18. 关于Xftp7的下载和安装
  19. Vue3:全局注册(参数:globalProperties,组件:component)
  20. 江苏事业单位计算机类考申论吗,想进事业单位?江苏事业单位统考,考些什么你知道吗?...

热门文章

  1. 2018年科技将怎样改变世界?阿里12位科学家发布年度科技趋势预测
  2. Polygon 年度游戏之《巴巴是你》:解读纯粹的游戏乐趣
  3. 开发笔记:掉落系统模块设计思路
  4. Mysql重置初始密码的方法
  5. ajax的交互流程有哪几步
  6. 如何在SecureCRT上使用公钥登陆Linux服务器
  7. Android Studio快捷键之代码提示
  8. 搭建git服务器(权限管理)
  9. 注意1:图像插值理论的理解
  10. python中的魔法参数:*args和**kwargs