三层架构

更新时间:2023-03-12 21:42

三层架构就是为了符合“高内聚,低耦合”思想,把各个功能模块划分为表示层(UI)、业务逻辑层(BLL)和数据访问层(DAL)三层架构,各层之间采用接口相互访问,并通过对象模型的实体类(Model)作为数据传递的载体,不同的对象模型的实体类一般对应于数据库的不同表,实体类的属性与数据库表的字段名一致。

含义

三层架构主要是指将业务应用规划中的表示层 UI、数据访问层 DAL 以及业务逻辑层 BLL,其分层的核心任务是“高内聚低耦合”的实现。在整个软件架构中,分层结构是常见和普通的软件结构框架,同时也具有非常重要的地位和意义。这种三层架构可以在软件开发的过程中,划分技术人员和开发人员的具体开发工作,重视核心业务系统的分析、设计以及开发,提高信息系统开发质量和开发效率,进而为信息系统日后的更新与维护提供很大的方便。

分层方式

怎么样分层符合三层架构原则呢?主要有以下三种分层方式:

1、数据层不包含任何代码,只有数据库,还有相关的存储过程。这种模式下,数据层看起来就变得很简单了。只包含所建立的数据库和一些存储过程(注意是存储过程)。其实这些存储过程的建立也是相当复杂的,因为它们可以完成除数据访问外的其他一些很强大的功能,如分页、实现搜索算法等。数据访问的逻辑就都放在业务层,当然业务层还包含其他一些逻辑代码。我们来看一个示例,假设数据库里有一个表 BOOKS(书),建立一个存储过程 GetAllBooks,用来读取书的信息,这样在业务层里编一个方法 GetBookS()和一个公用数据库访问类,GetBooks()就通过数据库访问类打开连接,执行在存储过程,返回数据 (返回类型可以是 DataT - able,DataSet,DataReader 或 者 实 体 类)。业务层单独编译成一个或者几个 DLL 文件。接着就是表示层了,表示层通过调用GetBookS()返回数据绑定在相关的控件里。业务层的方法都是在表示层调用。一般来说 book.aspx 和 book.aspx.cs 都是表示层的内容,所有前台的设计、相关控件、数据缓存都是属于表示层。

2、数据层还包含所有公共数据访问代码。这种模式和前一种差别不大,主要是把数据访问代码留到数据层。这样可以很方便地实现对多数据库的支持。业务逻辑层直接调用数据层的相关访问数据的代码,完全不必了解底层是什么数据库。其他和前一种没什么分别。

3、所有数据读取都放在数据层。这种模式下像前面所述的 GetBooks()方法都是放在数据层,在业务层再定义一个GetBookS()方法以供表示层调用。这种模式下业务层不但不必了解底层是什么数据库,而且连数据库的结构都不必了解了,这是最标准的三层架构了,在 Microsoft 的 PetShop 4.0 里就是这种模式。

结构体系

三层架构的体系结构:表示层和业务逻辑层之间用对象模型的实体类对象来传递数据,业务逻辑层和数据访问层之间用对象模型的实体类对象来传递数据,数据访问层通过.NET 提供的 ADO.NET 组件来操作数据库,或者利用 SQLServer 数据库服务器的存储过程来完成数据操作,三层架构的体系结构如图1所示。

这种分层体系结构具有以下四个优点:

(1)避免了表示层直接访问数据访问层,表示层只和业务逻辑层有联系,提高了数据安全性。

(2)有利于系统的分散开发,每一个层可以由不同的人员来开发,只要遵循接口标准,利用相同的对象模型实体类就可以了,这样就可以大大提高系统的开发速度。

(3)方便系统的移植,如果要把一个 C/S 的系统变成 B/S 系统,只要修改三层架构的表示层就可以了,业务逻辑层和数据访问层几乎不用修改就可以轻松的把系统移植到网络上。

(4)项目结构更清楚,分工更明确,有利于后期的维护和升级。

开发原理

三层架构中主要功能与业务逻辑一般要在业务逻辑层进行信息处理和实现,其中三层体系架构中的客户端和数据库要预设中间层,成为组建层。三层架构中的三层具有一定的逻辑性,即是将三层设置到同一个计算机系统中,把业务协议、合法校验以及数据访问等程序归置到中间层进行信息处理,一般客户端无法和数据库进行数据传输,主要是利用 COM/DCOM 通讯和中间层构建衔接通道,实现中间层与数据库的数据传输,进而实现客户端与是数据库的交互。

表示层

表示层又称表现层 UI,位于三层构架的最上层,与用户直接接触,主要是 B/S 信息系统中的 Web浏览页面。作为 Web浏览页面,表示层的主要功能是实现系统数据的传入与输出,在此过程中不需要借助逻辑判断操作就可以将数据传送到 BBL 系统中进行数据处理,处理后会将处理结果反馈到表示层中。换句话说,表示层就是实现用户界面功能,将用户的需求传达和反馈,并用 BLL 或者是 Models 进行调试,保证用户体验

业务逻辑层

业务逻辑层 BLL 的功能是对具体问题进行逻辑判断与执行操作,接收到表现层 UI 的用户指令后,会连接数据访问层 DAL,访问层在三层构架中位于表示层与数据层中间位置,同时也是表示层与数据层的桥梁,实现三层之间的数据连接和指令传达,可以对接收数据进行逻辑处理,实现数据的修改、获取、删除等功能,并将处理结果反馈到表示层 UI 中,实现软件功能。

数据访问层

数据访问层 DAL 是数据库的主要操控系统,实现数据的增加、删除、修改、查询等操作,并将操作结果反馈到业务逻辑层 BLL。在实际运行的过程中,数据访问层没有逻辑判断能力,为了实现代码编写的严谨性,提高代码阅读程度,一般软件开发人员会在该层中编写 Data AccessCommon,保证数据访问层 DAL 数据处理功能。

实体类库

实体类库是数据库表的映射对象,在信息系统软件实际开发的过程中,要建立对象实例,将关系数据库表采用对象实体化的方式表现出来,辅助软件开发中对各个系统功能的控制与操作执行,并利用 GET 与 SET 把数据库表中的所有字段映射为系统对象,建立实体类库,进而实现各个结构层的参数传输,提高代码的阅读性。从本质上看,实体类库主要服务于表示层、业务逻辑层以及数据访问层,在三层之间进行数据参数传输,强化数据表示的简约性。

优点

应用

应用服务器

服务器一般包括有连接与无连接形式,无连接在最底层要设置UDP/IP协议实现服务器通信功能,同时在实际使用的过程中,由于客户机无法保证可靠的传输渠道,使得客户机向服务器提交请求时,很容易造成请求的丢失、延迟以及传递失序等传输问题,进而降低通信质量。UDP的可靠性很低,在实际运行中UDP要依托于下层IP网络进行交付分组,无法引入检验程序,而IP网络还要由实际硬件网络或者是相关网关决定其工作质量。因此,从这一层面上看,下层网络的好坏直接关系到UDP工作。在进行开发有连接服务器的过程中,要利用TCP/IP通信协议,利用互联网创建良好的通信环境,进而提高通信数据的真实性和可靠性。TCP/IP通信协议可以对数据信息进行验证与校对,保证数据信息的完整性。同时在实际运行中,可以通过数据的序列号排序保证数据信息的有序到达,防止出现信息重复分组的情况。另外,这种通信协议可以对流量进行有效控制,确保发送信息速度在接收方的承受范围以内,通过INTERNET,实现服务器的面向连接。

应用客户端

在三层构架系统中,客户端是使用者的主要功能体验区域,相比于服务器而言非常简单。一方面,在三层构架运行的过程中,客户机软件要和各个服务器进行相互通信,不需要过于重视并发性处理。另一方面,一般客户机软件可以仿照常规程序进行指令执行,不需要进行外加保护,依托于操作系统进行强迫性保护。但与此同时对界面具有极高的要求,系统分析的过程中就要进行专门的界面设计,同时要和客户进行及时沟通,掌握客户的实际需求,实现高效的信息反馈与交流沟通,进而保证信息系统软件界面设计的质量和效率。

数据服务器

在进行数据服务器选择的过程中,要根据信息系统平台要求和用户期望要求,同时对应各个服务器的特点进行使用与选择。一般情况下出于对系统性能的考虑,会选择SQLSERVER数据服务器,设计阶段中要通过Proactive等有效措施对系统数据库的实际使用性能进行不断地优化与完善。同时管理人员要和程序设计人员进行有效的沟通与协作,明确信息系统软件的性能目标,设置性能期望值,构建系统资源组合体系,满足用户的实际需求。

数据库和应用服务器的连接

在基于三层构架的信息系统开发中,应用服务器要利用SQL语言进行连接数据库服务器,其连接方法包括DB-Library、DAO以及OLE等方式,其中DB-Library是最为常见的连接方式,作为SQLSERVER的重要接口层,具有极强的访问信息效率和访问速度。这主要是源于DB-Library的语言开发能力,直接省去DAO以及OLE等连接方式中抽象层的调用,节省了信息访问时间。同时,三层构架适用于使用诸多开发语言的信息系统开发,不是.NET的专利,也不是专门用在数据库上的技术,而是一种更加普适的架构设计理念,除了数据、逻辑、界面等层次之外,在实际应用中还会根据需要多出传递数据的层、接口层等等。在结合DB-Library数据库连接后,设置NTWDBLIB.LIB组建,构建CDBConn实体类库体系,实现数据库与应用服务器的连接。因此,信息系统软件架构可以为系统开发创造出良好的分布式计算环境,其中逻辑层可以实现多个机器的同时运行,通过计算机网络计算能力,强化系统各个功能板块的精准性和复用性,进而有效减少了信息系统软件开发的时间和周期,保证信息系统的安全性与拓展性,实现系统功能的最大化实现。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}