概述

  在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

  三层结构原理:

  3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。

  所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。

  三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。

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

  2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。

  3:表示层:主要表示WEB方式,也可以表示成WINFORM方式,WEB方式也可以表现成:aspx, 如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。

  具体的区分方法

  1:数据数据访问层:主要看你的数据层里面有没有包含逻辑处理,实际上他的各个函数主要完成各个对数据文件的操作。而不必管其他操作。

  2:业务逻辑层:主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。

  3:表示层:主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。

  

表示层

   位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。

  

业务逻辑层

   业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。例如Martin Fowler在《Patterns of Enterprise Application Architecture》一书中,将整个架构分为三个主要的层:表示层、领域层和数据源层。作为领域驱动设计的先驱Eric Evans,对业务逻辑层作了更细致地划分,细分为应用层与领域层,通过分层进一步将领域逻辑与领域逻辑的解决方案分离。

  业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。

  

数据层

   数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。

  简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。

优缺点

优点

  1、开发人员可以只关注整个结构中的其中某一层;

  2、可以很容易的用新的实现来替换原有层次的实现;

  3、可以降低层与层之间的依赖;

  4、有利于标准化;

  5、利于各层逻辑的复用。

缺点

  1、降低了系统的性能。这是不言而喻的。如果不采用分层式结构,很多业务可以直接造访数据库,以此获取相应的数据,如今却必须通过中间层来完成。

  2、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。

  3、增加了开发成本。

规则

  三层结构的程序不是说把项目分成DAL, BLL, WebUI三个模块就叫三层了, 下面几个问题在你的项目里面:

  1. UILayer里面只有少量(或者没有)的SQL语句或者存储过程调用, 并且这些语句保证不会修改数据?

  2. 如果把UILayer拿掉, 你的项目还能在Interface/API的层次上提供所有功能吗?

  3. 你的DAL可以移植到其他类似环境的项目吗?

  4. 三个模块, 可以分别运行于不同的服务器吗?

  如果不是所有答案都为YES, 那么你的项目还不能算是严格意义上的三层程序. 三层程序有一些需要约定遵守的规则:

  1. 最关键的, UI层只能作为一个外壳, 不能包含任何BizLogic的处理过程

  2. 设计时应该从BLL出发, 而不是UI出发. BLL层在API上应该实现所有BizLogic, 以面向对象的方式

  3. 不管数据层是一个简单的SqlHelper也好, 还是带有Mapping过的Classes也好, 应该在一定的抽象程度上做到系统无关

  4. 不管使用COM+(Enterprise Service), 还是Remoting, 还是WebService之类的远程对象技术, 不管部署的时候是不是真的分别部署到不同的服务器上, 最起码在设计的时候要做这样的考虑, 更远的, 还得考虑多台服务器通过负载均衡作集群

  所以考虑一个项目是不是应该应用三层/多层设计时, 先得考虑下是不是真的需要? 实际上大部分程序就开个WebApplication就足够了, 完全没必要作的这么复杂. 而多层结构, 是用于解决真正复杂的项目需求的。

编辑本段与MVC的区别

  MVC(模型Model-视图View-控制器Controller)是一种设计模式,我们可以用它来创建在域对象和UI表示层对象之间的区分。

  同样是架构级别的,相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。

  在三层架构中没有定义Controller的概念。这是我认为最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。

三层架构:表示层-业务逻辑层-数据访问层2相关推荐

  1. 三层架构:表示层——业务逻辑层——数据访问层

    三层架构:表示层--业务逻辑层--数据访问层 1.什么是三层架构 所谓的三层开发就是将系统的整个业务应用划分为表示层--业务逻辑层--数据访问层,这样有利于系统的开发.维护.部署和扩展. 分层是为了实 ...

  2. 三层架构:表示层-业务逻辑层-数据访问层

    三层架构和MVC是两个东西. 非要相关的话: 三层架构中"表现层"的aspx页面对应MVC中的View(继承的类不一样) 三层架构中"表现层"的aspx.cs页 ...

  3. 所谓的三层开发就是将系统的整个业务应用划分为表示层——业务逻辑层——数据访问层,这样有利于系统的开发、维护、部署和扩展。...

    1.什么是三层架构 所谓的三层开发就是将系统的整个业务应用划分为表示层--业务逻辑层--数据访问层,这样有利于系统的开发.维护.部署和扩展. 分层是为了实现"高内聚.低耦合".采用 ...

  4. 表示层——业务逻辑层——数据访问层

    转载连接: https://blog.csdn.net/iflychenyang/article/details/9670277 1.什么是三层架构 所谓的三层开发就是将系统的整个业务应用划分为表示层 ...

  5. java中表示层 控制层 业务逻辑层 数据访问层

    控制层(controller):的职能是负责读取视图表现层的数据,控制用户的输入,并调用业务层的方法: 业务层(service):需要根据系统的实际业务需求进行逻辑代码的编写,有些业务逻辑需要通过与数 ...

  6. 三层架构之业务逻辑层

    你好,是我琉忆. 今天我们讲一讲三层架构中的业务逻辑层 1.业务逻辑层的介绍 业务逻辑层(Business Logic Layer,简称 BLL)是系统架构中体现核心价值的部分.它的关注点主要集中在业 ...

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

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

  8. 我对架构设计的5点思考:网关、业务逻辑、数据访问

    随着业务的发展,每个产品都需要对应数量的开发者作为支撑,但在长期的协作中,我们发现开发团队都会遇到一些普遍难点:构建速度慢.开发测试周期长.协作困难等. 在快速的业务迭代中,各团队的开发人员往往只会将 ...

  9. 三层架构 - 表现层(界面层、Web层 - MVC)、业务逻辑层(Service)、数据访问层(DAO)

    三层架构 软件设计架构 界面层(表示层.变现层): 用户看的界面. 用户可以通过界面上的组件和服务器进行交互 业务逻辑层: 处理业务逻辑. 数据访问层: 操作数据存储文件. 三层架构和MVC MVC开 ...

最新文章

  1. YOLOV4知识点分析(一)
  2. python构造icmp数据包_如何在python中构造ICMP数据包
  3. 【错误记录】安卓 RecyclerView 报错 ( only use immediately and call holder.getAdapterPosition() to look it up )
  4. Linux服务器版本鼠标,安装GPM给Linux虚拟控制台提供配置鼠标支持
  5. 妙用世界之窗浏览器的隐私保护功能
  6. 有机食品海报这样设计,收获了意想不到的效果…
  7. 如何应对数据匮乏,试试冷启动阶段开发的风险评分
  8. php mime base64,base64_encode — 使用 MIME base64 对数据进行编码
  9. Linux 内核源代码的结构
  10. postgresql 动态添加过滤条件_XsqlFilterResult----动态生成sql语句的类,过滤一些为空的查询条件...
  11. MarkDown公式输入
  12. 如何合理选择AI加速器?
  13. matplotlib简单做图
  14. VS2010编译静态链接MFC的OCX遇到的问题:nafxcwd.lib(dllmodul.obj) : error LNK2005: _DllMain@12 已经在 LIBCMTD.lib(dllm
  15. 新科技巡礼:2017十大前沿科技产品有哪些?
  16. JavaScript的NaN为什么不等于NaN
  17. 仿QQ聊天系统(JAVA+MySQL)
  18. vectorvn1610报价_Vector硬件VN1640A
  19. 升级 Ubuntu Linux 内核的几种不同方法 | Linux 中国
  20. crc校验查表法原理

热门文章

  1. 适合晚上静静听!5首优美略带伤感的纯音乐
  2. 美元继续走强,亚盘原油价格持稳
  3. APP测试_测试点总结
  4. 财务报表分析——理论、方法与案例(微课版) PDF
  5. localhost 已拒绝连接。
  6. 网络基础设施 拥塞控制
  7. swift5保存图片到系统的相机胶卷里面
  8. DrawCall详细介绍
  9. java version命令_java -version命令报错如何解决
  10. Spring Cloud 之 Hystrix