一、三层结构概述
在软件开发中,三层结构(Three - Tier Architecture)是一种常见的软件架构模式。它将软件系统分为三个主要的层次,即表示层(Presentation Layer)、业务逻辑层(Business Logic Layer)和数据访问层(Data Access Layer)。每一层都有其特定的功能,并且层与层之间相互协作,以实现完整的软件功能。这种分层结构有助于提高软件的可维护性、可扩展性和可复用性。
二、各层详细介绍
-
表示层
- 功能:
- 表示层是用户与软件系统直接交互的界面。它负责接收用户的输入(如鼠标点击、键盘输入等),并将这些输入传递给业务逻辑层进行处理。同时,它还负责将业务逻辑层处理后的结果以直观的方式呈现给用户,例如通过图形界面(GUI)、网页(HTML)等形式。
- 示例:
- 在一个 Web 应用中,网页上的表单就是表示层的一部分。用户在表单中输入数据(如用户名和密码),然后点击提交按钮。这个按钮的点击事件会触发表示层将用户输入的数据发送到业务逻辑层进行验证等操作。在桌面应用中,一个窗口的界面布局和各种控件(如文本框、按钮)也是表示层,它们负责显示信息和接收用户操作。
- 技术和工具:
- 对于 Web 应用,通常会使用 HTML、CSS 和 JavaScript 等技术来构建表示层。在桌面应用中,可能会使用像 JavaFX、Windows Forms(.NET)等框架来创建图形用户界面。
- 功能:
-
业务逻辑层
- 功能:
- 业务逻辑层是整个软件系统的核心。它包含了软件系统的业务规则和业务流程。它接收表示层传来的用户请求,根据业务规则进行处理,例如数据验证、业务流程控制、计算等。它还负责协调数据访问层的操作,以获取或更新数据。
- 示例:
- 以一个电商系统为例,业务逻辑层会包含处理订单的逻辑。当表示层传来一个用户下单的请求后,业务逻辑层会验证订单信息(如商品数量是否合法、用户账户余额是否足够等)。它还会根据库存管理的业务规则,检查商品库存是否满足订单需求。如果库存不足,可能会触发补货流程或者向用户提示库存不足的信息。
- 技术和工具:
- 在这一层,通常会使用编程语言的高级特性来实现复杂的业务逻辑。例如,在 Java 中,可以使用面向对象的设计模式(如工厂模式、策略模式等)来组织和管理业务逻辑。对于大型企业级应用,可能会使用企业服务总线(ESB)来协调不同业务模块之间的通信。
- 功能:
-
数据访问层
- 功能:
- 数据访问层主要负责与各种数据存储系统(如数据库、文件系统等)进行交互。它提供了对数据的读取、写入、更新和删除操作。它隐藏了数据存储的具体细节,使得业务逻辑层不需要关心数据是如何存储和检索的,只需要调用数据访问层提供的接口来获取或更新数据即可。
- 示例:
- 在一个基于关系型数据库的应用中,数据访问层会包含 SQL 语句或者使用对象 - 关系映射(ORM)工具来执行数据库操作。比如,当业务逻辑层需要查询某个用户的订单信息时,数据访问层会根据业务逻辑层传递的参数(如用户 ID),构造合适的 SQL 查询语句(如 “SELECT * FROM orders WHERE user_id =?”),然后执行查询操作并将结果返回给业务逻辑层。
- 技术和工具:
- 对于数据库访问,常见的技术包括使用ADO.NET(在.NET 环境中)、JDBC(在 Java 环境中)等直接操作数据库的技术。同时,ORM 框架如 Hibernate(Java)、Entity Framework(.NET)也被广泛应用,可以让开发者以面向对象的方式操作数据库,而不需要编写大量的 SQL 语句。
- 建立一个图书馆查询所有图书,运用三场结构的方法
-
-
package org.appimport org.app.ui.LibrarayPresentationimport scala.io.StdIn object Main {def main(args: Array[String]): Unit = {val m = new LibrarayPresentation()m.showVisitorMenu()} }
package org.app package models //图书类 //id 书名 作者 状态 case class BookModel (id:Int,name:String,author:String,status:String){}
package org.app package serviceimport models.BookModel import org.app.dao.BookDAD import scala.collection.mutable.ListBuffer//图书业务逻辑层 class BookService {private val bookDAD = new BookDAD//查询所有的图书//def searchBooks(query:String):图书列表List(Book对象)def searchBooks(query:String):ListBuffer[BookModel] = {//从文本文件在读取书本信息,并保存列表中,返回bookDAD.loadBooks()}}
package org.appimport org.app.ui.LibrarayPresentationimport scala.io.StdIn object Main {def main(args: Array[String]): Unit = {val m = new LibrarayPresentation()m.showVisitorMenu()} }
1.人性的弱点,卡耐基,false 2.理想国,柏拉图,false 3.埃隆·马斯克传,艾萨克森,true 4.苏东坡传,林语堂发,false 5.杨苡口述自传,杨苡,余斌,true 6.曾国藩传,张宏杰,true 7.小王子,安托万·德·圣-埃克苏佩里,true 8.毛泽东选集,毛泽东,true 9.毛泽东传,胡绳,true 10.毛泽东传,李锐,true 11.test, 测试,true
-
- 功能:
三、三层结构的优点
- 可维护性:
- 由于各层职责明确,当软件系统需要进行维护时,开发人员可以很容易地定位问题所在的层次。例如,如果用户界面出现问题,主要在表示层进行修改;如果业务规则发生变化,只需要在业务逻辑层进行调整;如果数据库结构或者存储方式改变,重点在数据访问层进行更新。这种分层的方式使得软件系统的维护更加高效,降低了维护成本。
- 可扩展性:
- 软件系统可以很容易地进行功能扩展。例如,要添加一个新的业务功能,只需要在业务逻辑层添加相应的业务规则和处理逻辑,并在表示层添加相应的用户界面元素来触发和展示这个新功能。同时,如果需要更换数据存储方式(如从关系型数据库转换到非关系型数据库),只要修改数据访问层的实现,而不会影响业务逻辑层和表示层的正常运作。
- 可复用性:
- 各层的组件可以在不同的软件项目中进行复用。例如,数据访问层的数据库操作代码可以在多个具有相似数据存储需求的项目中使用。业务逻辑层的一些通用的业务处理模块(如用户认证模块)也可以被复用,这样可以提高软件开发的效率,减少重复开发的工作量