所谓的三层开发就是将系统的整个业务应用划分为表示层——业务逻辑层——数据访问层,这样有利于系统的开发、维护、部署和扩展。...
1.什么是三层架构 所谓的三层开发就是将系统的整个业务应用划分为表示层——业务逻辑层——数据访问层,这样有利于系统的开发、维护、部署和扩展。 分层是为了实现“高内聚、低耦合”。采用“分而治之”的思想,把问题划分开来各个解决,易于控制,易于延展,易于分配资源。
ASP.NET可以使用.NET平台快速方便地部署三层架构。ASP.NET革命性的变化是在网页中也使用基于事件的处理,可以指定处理的后台代码文件,可以使用C#、VB、C++和J#作为后台代码的语言。. NET中可以方便的实现组件的装配,后台代码通过命名空间可以方便的使用自己定义的组件。显示层放在ASPX页面中,数据库操作和逻辑层用组件或封装类来实现,这样就很方便的实现了三层架构。 2.为什么使用三层架构 对于一个简单的应用程序来说,代码量不是很多的情况下,一层结构或二层结构开发完全够用,没有必要将其复杂化,如果对一个复杂的大型系统,设计为一层结构或二层结构开发,那么这样的设计存在很严重缺陷。下面会具体介绍,分层开发其实是为大型系统服务的。 在开发过程中,初级程序人员出现相似的功能经常复制代码,那么同样的代码为什么要写那么多次?不但使程序变得冗长,更不利于维护,一个小小的修改或许会涉及很多页面,经常导致异常的产生使程序不能正常运行。最主要的面向对象的思想没有得到丝毫的体现,打着面向对象的幌子却依然走着面向过程的道路。 意识到这样的问题,初级程序人员开始将程序中一些公用的处理程序写成公共方法,封装在类中,供其它程序调用。例如写一个数据操作类,对数据操作进行合理封装,在数据库操作过程中,只要类中的相应方法(数据添加、修改、查询等)可以完成特定的数据操作,这就是数据访问层,不用每次操作数据库时都写那些重复性的数据库操作代码。在新的应用开发中,数据访问层可以直接拿来用。面向对象的三大特性之一的封装性在这里得到了很好的体现。读者现在似乎找到了面向对象的感觉,代码量较以前有了很大的减少,而且修改的时候也比较方便,也实现了代码的重用性。 下面举两个案例,解释一下为什么要使用三层架构。 案例一: 数据库系统软件由于数据量的不断增加,数据库由Access变成了SQL Server数据库,这样原来的数据访问层失效了,数据操作对象发生了变化,并且页面中涉及数据对象的地方也要进行修改,因为原来可能会使用OleDbDataReader对象将数据传递给显示页面,现在都得换成SqlDataReader对象,SQL Server和Access支持的数据类型也不一致,在显示数据时进行的数据转换也要进行修改,这是其中一种情况。 案例二: 由于特殊情况需要,把Web形式的项目改造成Windows应用,此时需要做多少修改呢?如果在Aspx.cs中占据了大量代码,或者还有部分代码存在于Aspx中,那么整个系统是否需要重新来开发呢? 在上面的案例中是否体会到了没有分层开发模式的缺陷呢?是否碰到过这样的情况呢?这都是由设计不合理造成的,多层开发架构的出现可以很好地解决该问题,通过程序架构进行合理的分层,将极大地提高程序的通用性。 3.使用三层架构开发的优点 使用三层架构开发有以下优点:
4.三层架构的种类 目前,团队开发人员在开发项目时,大多都使用分层开发架构设计,最常见的就是三层架构,目的在于使各个层之间只能够被它相邻的层产生影响,但是这个限制常常在使用多层开发的时候被违反,这对系统的开发是有害的。三层架构按驱动模式可划分三种:数据层驱动模式、陈述层驱动模式和隔离驱动模式,其中隔离驱动模式开发最为重要。下面通过三种模式的对比,介绍隔离驱动模式的重要性。 数据层驱动模式 所谓的数据层驱动模式,就是先设计数据层,陈述层围绕数据层展开,一旦完成了数据层和陈述层,业务层就围绕数据层展开。因为陈述层是围绕数据层展开的,这将会使陈述层中的约束不准确,并且限制了业务层的变更。由于业务层受到限制,一些简单变化可以通过SQL查询和存储过程来实现。 这种模式非常的普遍,它和传统的客户服务端开发相似,并且是围绕已经存在的数据库设计的。由于陈述层是围绕数据层设计的,它常常是凭直觉模仿数据层的实际结构。 常常存在一种额外的反馈循环在陈述层到数据之间,当在设计陈述层不容易实现的时候常常会去修改数据层,也就形成了这种反馈循环。开发者请求修改数据库方便陈述层的开发,但是对数据层的设计却是有害的。这种改变是人为的而没考虑到其他需求的限制。这种修改经常会违反至少损害数据的特有规则,导致不必要的数据冗余和数据的非标准化。 陈述层驱动模式 陈述层驱动模式是数据层围绕陈述层展开的。业务层的完成一般是通过简单的SQL查询和很少的变化或者隔离。由于数据库的设计是为了陈述层的方便,并非从数据层设计方面考虑,所以数据库的设计在性能上通常很低。陈述层驱动模式设计图如图1.6所示。 隔离驱动模式 用隔离驱动模式设计,陈述层和数据层被独立的开发,常常是平行开发。这两层在设计时没有任何的相互干扰,所以不会存在人为的约束和有害的设计元素。当两层都设计完成后,再设计业务层。业务层的责任就是在没有对数据层和陈述层的需求变化的基础上完成所有的转换。陈述层驱动模式设计。 因为现在陈述层和数据层是完全独立的,当业务层需求改变的时候,陈述层和数据层都可以做相应的修改而不影响对方。改变两个在物理上不相邻的层不会直接对其他层产生影响或发生冲突。这就允许数据层结构的调整或者陈述层根据用户的需求做相应的变化,而不需要系统做大的调整或者修改。表1.1将对这3种驱动模式进行对比。 表 种驱动模式对比
综上所述,很容易看出隔离驱动模式的优点,隔离驱动模式设计可以极大地提高程序的扩展性。在1.3.2节中的应用中就采用了三层架构的隔离驱动模式。 |
||||||||||||||||||||
转载于:https://www.cnblogs.com/zhenhua/archive/2010/10/12/1848730.html
所谓的三层开发就是将系统的整个业务应用划分为表示层——业务逻辑层——数据访问层,这样有利于系统的开发、维护、部署和扩展。...相关推荐
- 三层架构:表示层——业务逻辑层——数据访问层
三层架构:表示层--业务逻辑层--数据访问层 1.什么是三层架构 所谓的三层开发就是将系统的整个业务应用划分为表示层--业务逻辑层--数据访问层,这样有利于系统的开发.维护.部署和扩展. 分层是为了实 ...
- 三层架构:表示层-业务逻辑层-数据访问层
三层架构和MVC是两个东西. 非要相关的话: 三层架构中"表现层"的aspx页面对应MVC中的View(继承的类不一样) 三层架构中"表现层"的aspx.cs页 ...
- 三层架构:表示层-业务逻辑层-数据访问层2
概述 在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构.微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层.业务逻辑层(又或称为领域层).表示层. 三层结构原理: 3个层次中, ...
- 三层架构 - 表现层(界面层、Web层 - MVC)、业务逻辑层(Service)、数据访问层(DAO)
三层架构 软件设计架构 界面层(表示层.变现层): 用户看的界面. 用户可以通过界面上的组件和服务器进行交互 业务逻辑层: 处理业务逻辑. 数据访问层: 操作数据存储文件. 三层架构和MVC MVC开 ...
- java三层架构(表示层,业务逻辑层,数据访问层,与两层的区别,三层架构的优缺点)
目录 1 什么是三层 2 为什么使用三层 3 与两层的区别 1 什么是三层 UI(表现层): 主要是指与用户交互的界面.用于接收用户输入的数据和显示处理后用户需要的数据. BLL:(业务逻辑层): U ...
- ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发
为什么80%的码农都做不了架构师?>>> ASP.NET3.5 企业级项目开发 -- 第二章 数据访问层(DAL)的开发 前言:本篇主要讲述数据访问层的开发, ...
- 项目架构开发:数据访问层之Cache
数据访问层简单介绍 数据访问层,提供整个项目的数据访问与持久化功能.在分层系统中所有有关数据访问.检索.持久化的任务,最终都将在这一层完成. 来看一个比较经典的数据访问层结构图 大概可以看出如下信息 ...
- Java job interview:项目开发小组成员网站数据访问层设计
在前面简单描述了下服务层,SOA面向服务架构,架构设计-业务逻辑层,以及一些面面向设计原则理解和软件架构设计箴言.这篇博客我们将继续进入我们的下一层:数据访问层.无论你用的是什么开发模式或者是业务模式 ...
- 桥接模式的应用之三层架构中的业务逻辑层(BLL)与数据访问层(DAL)的解耦
各层的作用 ①用户界面层:只负责显示和采集用户操作. ②业务逻辑层:负责UI和DAL层之间的数据交换,是系统架构中体现核心价值的部分.它关注点主要集中在业务规则的制定.业务流程的实现和业务需求的有关系 ...
最新文章
- 医学科研中的作用_医学论文中参考文献的作用及常见类型
- 学习笔记Hive(六) —— Hive开发应用
- linux平台下rpm方式和源码包方式安装mysql5.7
- One order event display tool
- 数据结构之外部排序:最佳归并树
- Python一题三解:查找字符串中每个字符的首次出现
- 69. (待补) (使用sqlite3)实现简单的管理系统 MVC 将链表作为内存数据模型,将sqlite3作为数据库,将终端作为交互界面。读数据库生成 链表,修改链表写入文件。...
- micropython和python区别-MicroPython简介
- 2019-07-11 nginx 下网页显示乱码
- STM32计数器/定时器之PWM脉宽捕获+超声波传感器测距
- dsolve函数的功能_为什么Mathematica的DSolve函数会解不出显式解??
- mybatis与spring整合详解
- jquery获取checkbox选中的值
- js给动态创建出来的元素添加事件
- 二分查找算法递归和非递归实现
- Array.from和Array.of
- 云小课|帮您高效快速上传组件至私有依赖库
- 史上最简单MYSQL教程详解(基础篇)之初识MySQL数据库以及环境配置
- 分析RM970 固件V2.5版本的图片文件列表
- http://studyai.com/
热门文章
- 无线433远距离遥控时有杂波的解决方案
- MathJax 规则
- Onedrive文件下载
- 佳能Canon PIXMA iP6000D 打印机驱动
- JOS学习笔记(十)
- 1656_MIT 6.828 JOS i386_init的实现分析
- “对使用非SDK接口的限制”的适配实战
- 刘涵 美国 西北大学 计算机,西北大学关于表彰2010-2011学年度学生先进集体.doc...
- 51单片机中断与定时器计数器,基于普中科技教学视频学习记录
- java面试项目车辆管理_基于jsp的车辆管理系统-JavaEE实现车辆管理系统 - java项目源码...