关于
三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。
1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增、删、改、查。
概述
在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。
三层结构原理:
3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。
所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。
三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。
表示层
位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。
业务逻辑层
业务逻辑层(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、有时会导致级联的修改。这种修改尤其体现在自上而下的方向。如果在表示层中需要增加一个功能,为保证其设计符合分层式结构,可能需要在相应的业务逻辑层和数据访问层中都增加相应的代码。
规则
三层结构的程序不是说把项目分成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表示层对象之间的区分。
同样是架构级别的,相同的地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。
在三层架构中没有定义Controler的概念。这是我认为最不同的地方。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC搭建程序最主要的区别。当然了。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是已实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。
相关推荐
真正开始着手开发一个Web项目时,才发现错综复杂的数据与关联根本就不是SqlDataSource和AccessDataSource数据源控件能简单解决的,而恰恰是被忽视了的一个ObjectDataSource数据源控件才是真正踏入开发门槛的关键,...
### 1.1、三层架构 三层架构包含的三层: 界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer) 三层的职责 1. 界面层(表示层,视图层):主要功能是接受用户的...
分三个部分,请下载完成后解压!...《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》内容全面,结构清晰,注重实战,非常适合Java Web开发人员学习使用,同时也可以作为软件公司的案头必备参考书。
《php和mysql web开发(原书第4版)》:开发人员专业技术丛书。 目录 读者反馈 译者序 前言 作者简介 第一篇 使用PHP 第1章 PHP快速入门教程 1.1 开始之前:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 ...
5.4 三层式应用程序 145 5.4.1 传统的客户端/服务器 145 5.4.2 PHP和多层应用程序 146 5.4.3 PHP和COM 147 5.4.4 PHP和Java 149 5.5 小结 150 第6章 PHP数据库访问 151 6.1 PHPLib:PHP基础库 151 6.1.1 PHPLib的...
分三个部分,请下载完成后解压!...《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》内容全面,结构清晰,注重实战,非常适合Java Web开发人员学习使用,同时也可以作为软件公司的案头必备参考书。
分三个部分,请下载完成后解压!...《Java Web整合开发王者归来(JSP+Servlet+Struts+Hibernate+Spring)》内容全面,结构清晰,注重实战,非常适合Java Web开发人员学习使用,同时也可以作为软件公司的案头必备参考书。
11.1 Web数据库架构的工作原理 11.2 从Web查询数据库的基本步骤 11.2.1 检查与过滤用户输入数据 11.2.2 建立一个连接 11.2.3 选择使用的数据库 11.2.4 查询数据库 11.2.5 检索查询结果 11.2.6 从数据库断开连接 ...
全书的核心,五个三层架构的实例 1.智能仓库管理系统 2.在线帮助系统 3.基础平台管理系统 4.个人博客系统 5.电子商务系统 第6章 智能仓库管理系统 113 6.1 系统总体设计 113 6.1.1 系统功能描述 113 6.1.2 ...
《php和mysql web开发(原书第4版)》:开发人员专业技术丛书。 目录 读者反馈 译者序 前言 作者简介 第一篇 使用PHP 第1章 PHP快速入门教程 1.1 开始之前:了解PHP 1.2 创建一个示例应用:Bob汽车零部件商店 ...
10.1 在 delphi 6开发 midas三层应用程序 10.1.1 在 delphi 6中创建应用服务器 10.1. 2 在delphi 6中创建客户程序 10.1.3 与应用服务器链接 10.1.4 调用服务器上的接口 10.1.5 在客户端纠错 10. ...
4. 系统采用了三层架构设计,包括表示层、业务逻辑层和数据访问层,降低了各模块之间的耦合度,提高了系统的可扩展性和可维护性。 5. 系统支持多种邮件协议和附件格式,兼容性好、功能强大。 6. 系统采用了HTTPS加密...
全书的核心,五个三层架构的实例 1.智能仓库管理系统 2.在线帮助系统 3.基础平台管理系统 4.个人博客系统 5.电子商务系统 第6章 智能仓库管理系统 113 6.1 系统总体设计 113 6.1.1 系统功能描述 113 6.1.2 ...
MVC模式,MVC与三层架构模式,WebFroms vs ASP.NET MVC
4.4 JSP+JavaBean+Servlet三层开发模式 138 案例4-3 新闻中心模块的实现(三层结构) 140 第5章 Eclipse中Struts的开发 154 5.1 Struts概述 154 5.2 开发Struts Web应用的基本过程 156 5.2.1 Eclipse中...
探讨了软件架构设计中的常见问题,如:技术可行性分析、三层体系结构的设计要点、测试、发布以及安全问题。第二天的课程包括: ·软件设计文档编写 ·立项阶段架构师的工作 ·使用MSF与MOF结合覆盖软件生命周期 ...
主要分为LAMP概述和 PHP简介,包括基于B/S的Web系统三层体系、LAMP的组成体系、System: Linux/Unix、Server: Apache、Storage: MySQL+Memcached 、Script: PHP/Perl/Python、经典LAMP架构网站分析、几种网站架构比较...
该案例采用目前最流行、最规范的java ee架构,整个应用分为jpa实体层、eao层、业务逻辑层、mvc层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了ide无关的、基于ant管理的项目源码...