软件体系结构 - 核心概念快速入门

228 阅读24分钟

1.1 什么是软件体系结构

什么是软件体系结构

  • 软件体系结构是一系列关于软件系统组织的重大决策,是软件系统结构的结构,由软件元素、元素的外部可见属性以及元素间的关系组成;
  • 软件体系结构是具有一定形式的结构化元素,即构件的集合,包含数据构件、处理构件和连接构件; 为什么需要软件体系结构
  • 为软件系统提供了一个结构,这种结构是行为与属性的高度抽象,这些元素相互作用,知道元素组成的模式以及这些模式的约束组成;不仅制定了系统的组织结构和拓扑关系,而且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理;
  • 为了有效地重用现有系统并与之协同工作,即使开发新的业务功能,减轻成本压力,需要为企业建立十分灵活和敏捷的完美结构;

1.2 软件体系结构与程序范型

什么是软件范型

软件范型是对于软件的一种抽象,一般通过非数学模型进行描述,这源于软件本身的特殊性;

  • 特殊性:软件描述的基本元素的一致性
    • 无论如何描述软件,同构模型描述的最基本单元的抽象都是统一的;
    • 对于统一的基本单元的抽象称之为软件范型

1.2.1 功能范型

什么是功能范型 功能范型源自于面向过程的代码设计,因此也可以称之为过程范型;它将一个系统分解为若干个基本的功能模块,基本功能模块之间按需进行调用,基本的功能模块集合以及调用关系集合通过构成了一个系统的模型;

  • 早期的软件 = 计算数据 + 算法
    • 早期的软件系统结构简单,直接和计算机的底层数据交互,因此软件设计中的主要抽象就是对于功能的抽象;
    • 而算法对外抽象出的 API,就是对于功能的高度封装,这种封装的过程就是功能范型; 核心思想
  • 抽象及耦合
  • 递归思想 功能范型中数据传输方式
  • 功能范型中数据传输方式:通过堆栈传输
  • 通过参数进行数据传输的两种方式:值传递以及引用传递;

1.2.2 对象范型

什么是对象范型 对象范型以对象为核心,通过对象对数据进行组织的抽象,从而实现数据组织和数据处理的统一,并建立了抽象数据类型构造的方法;

  • 对象:由型所描述出来的类型实例,本质上就是数据;
  • 型:包含属性和行为两个部分,静态属性属于数据组织,动态行为对应于数据处理; 对象范型的核心
  • 核心一:对数据类型的抽象;
  • 核心二:同构对象关系的定义
    • 继承:同组对象中后代可以共享千代的某些属性以及行为特征;
    • 多态:对象某种行为在各个具体实例中呈现不同的形态;

1.2.3 组件范型

什么是组件范型 面向组件范型是面向对象编程的极端抽象化表现形式,它进一步强调了异族对象关系以及独立性的方法;

  • 什么是异族同类对象:组件内部完成组件功能的对象不但可以是同组的,还可以是异族的;
  • 什么是独立性:组件建立在二进制基础上并独立封装,可以独立部署;
  • 基本原理:以接口为核心,通过结构抽象组件的行为,在此基础建立面向接口的软件构造方法; 什么是接口 对象动态行为的集合;重视在概念层面和规约层面上认识面向对象的方法和思想,强调对象是一组责任,将数据组织部分分装在内部,不对外暴露,只将对于数据的处理部分以接口形式对外暴露; 什么是组件 能够完成特定功能并可以独立部署的软件合成单元;
  • 组件含有一个或多个接口,接口的具体功能由组件对象来实现; 组件范型与软件总线
  • 什么是软件总线
    • 组件范型强调标准,以实现独立性的组件之间的集成;
    • 软件范型的标准一般称为软件总线
    • 软件总线定义了组件的封装结构,并提供了基本的集成服务功能,满足同一标准的组件可以通过软件总线进行集成;
  • 软件总线的内容
    • 提供各项基本服务;
    • 高级服务:属性服务、持久化服务、安全服务、事务服务等;

1.2.4 服务范型

什么是服务

  • 封装着高级业务概念、实现公共需求功能、可远程访问的独立应用程序模块,其独立于具体的技术细节,提供业务功能而非技术功能,将具体的技术细节隐藏在内部,错那个人实现服务的无缝集成;
  • 构成:由数据、业务逻辑、接口、服务描述构成; 服务范型的框架 服务范型也采用基于框架的程序构造方法,其使用动态框架,基于业务流程的需要,动态集成各个 Web 服务; 服务范型的抽象意义 服务模型使用基于 XML、与具体机器无关的文本描述,标准统一,使得服务接口和执行环境彻底分离;
  • 和组件范型的区别:
    • 组件范型侧重于细粒度的技术基础
    • 服务范型侧重于面向粗粒度的应用基础,实现业务服务和业务流程的抽象;

1.2.5 软件体系结构与程序范型的关系

程序范型的演化体现了软件体系结构的演化 程序范型从结构化体系结构到基于对象范型、组件范型、以及新三层结构,并到基于服务的 SOA 结构,它体现了软件体系结构的从以机器为中心、逐渐转化为以应用为中心,最终变成以企业为中心的过程;它们两者都表现了统一的核心思想:抽象的层次越来越高。


1.3 设计模式

1.3.1 什么是设计模式

什么是设计模式 对应软件开发过程当中、不断重复发生的问题以及解决方法的描述,在特定条件下解决面向对象软件中一般设计问题的类和相互通信对象的描述,它介于软件范型和软件体系结构之间; 设计模式的组成

  • 模式名称
  • 问题
  • 解决方案
  • 效果 三种模式类型
  • 创建型模式:抽象了类的实例化过程,使得系统不必关心对象如何被创建、组合以及表示;
  • 结构型模式:处理类和对象的组合问题;
  • 行为型模式:处理类与对象之间如何交互以及分配职责进行描述;

1.3.2 工厂方法模式

什么是工厂方法模式

  • 定义一个用于创建对象的接口,让子类决定实例化的时机以及目标。工厂方法模式让一个类的实例化延迟到了其子类; 通过提供一个抽象的、专门用于创建对象的操作方法,以对对象的创建过程进行抽象以及封装。进而在处理对象的创建与管理时,可以在抽象层面上建立一个统一的结构,客户只需要了解抽象的结构、创建的方法,而不需要对象的实现细节,即可对对象进行创建,进而使创建过程独立于类的对象的创建过程; 工厂方法使用场合 工厂方法模式主要用于隔离对于类对象的使用与具体类型的紧耦合,在一个具体的类型之上建立一层抽象,客户只需要面向工厂来进行实例的创建,而无需关心具体的类型;
  • 扩展优于更改: 通过将具体对象的创建延迟,减少了对于代码的更改,通过扩展的方式来扩充行为; 工厂方法和抽象工厂的关系
  • 相同点
    • 都是用于解决对象的创建问题;
    • 都提供一个抽象的、专门用于创建对象的操作方法,进而可以对对象的的创建与管理建立统一的标准;
  • 不同点
    • 抽象工厂更适合用于创建不同系列的不同类型对象;
    • 工厂方法更适合创建同系列不同类型的对象;

1.3.3 抽象工厂模式

什么是抽象工厂模式 通过定义一个能生产一个产品系列的抽象工厂类,建立用于解决生成一系列相关产品的通用解决方法,对于具体产品的生成,可以通过子类覆盖抽象工厂类中生产各种产品的操作,一个产品系列的产品生产具体实现由具体的工厂子类去完成;

  • 创造统一的抽象创建结构,这种结构独立于各种具体的产品系列的产品生产过程,用于解决同时生成一系列相关产品的通用解决方案; 使用场合 在一个软件当中同时用于多个产品系列,这些产品系列不应到依赖于具体的产品类的生产时,可以使用抽象工厂模式;

1.3.4 生成器模式

什么是生成器模式 为包含各种不同不见的复杂产品的生产提供一种良好通用的解决方案,分离产品的构件和表示,使得同样的构建过程可以创建不同的表示;

1.3.5 适配器模式

什么是适配器模式

  • 什么是适配器模式
    • 计算机系统中用来连接系统总线和外围设备的一种接口设备。它将系统总线的标准控制信号转化为各种外围设备需要的控制信号;

1.4 软件形态与案例分析

1.4.1 体系结构风格与软件形态基本概念

什么是软件体系结构的风格 软件体系结构的基本呈现形态特征,其由若干基本元素构成,采用一种或者多种特定的设计手段和方法;

  • 软件范型和设计模式是风格建立的基本元素;
  • 分层(Layer)是特定方法和手段; Layer 和 Tier 的区别
  • Layer 通常指逻辑上的分层;
  • Tier 通常指物理上的分层;
  • 多个 Layer 可以运行在同一个 Tier 之上;
  • 不同的 Layer 可以运行在多个 Tier 之上; Layer 风格 一种面向同族系统的软件体系结构风格,同族系统内部的各个从此之间的关系对于外部透明,外部系统只可以与系统的顶层或者底层交互; Layer 风格案例
  • ISO/OSI RM
  • TCP/IP 协议簇
  • MVC 结构 Tier 风格 一种面向一组异族系统的一种软件体系结构风格,异族系统的各个层次之间关系对于外部系统而言是不透明的,外部系统可以与该系统的任何一个层进行交互; Tier 风格案例
  • C/S 架构
  • 老 3-Tier/n-Tier 结构
    • 界面层:包含客户端以及网络传输环境
    • 业务逻辑层:专门面向应用业务规则的逻辑层次,从数据处理独立出来,用于处理复杂的应用规则代码;
    • 数据层:将数据库管理系统以及基本应用独立成数据层,其中含有数据服务器; Tier 风格案例之 Browser/Server 结构
  • 网页技术发展
    • 静态网页技术:以 HTML 语言描述的页面为基本单元,通过超链接实现信息页面之间的语义链接;
    • 动态网页技术:
      • 为了集成数据库系统并实现信息的动态性,在静态 HTML 网页中增加脚本代码来实现数据库的连接和访问,以及对信息的处理;通过在信息服务器端执行扩展的脚本代码来动态的生成 HTML 网页;
      • 客户端技术
      • 服务端技术

1.4.2 新 3-Tier 三层结构

什么是新 3-Tier 结构 在 B/S 基础之上,对服务端的工作性质从逻辑上划分,建立一个专门面向业务规则处理的逻辑层,称之为业务逻辑层;实现该功能的称之为应用服务器; 将 DBMS 以及其基本应用称之为数据服务层 什么是 n-Tier 结构

  • 1-Tier
    • 所有的 Layer 只能运行在同一台主机上;
    • 为了实现 1-Tier 架构,我们需要采用嵌入式数据库系统,因为这种数据库系统不能够运立的进程上。要不然这就是一个至少为 2-Tier 的架构,因为非嵌入式数据库系统通常可运行在一个独立的主机 (Tier)上;
  • 2-Tier
    • 展现 Layer 和应用 Laver 运行在同一个主机上,或者应用 Layer 和数据 Layer 运行在同一台主机上,整个应用系统不能运行在多于 2 台的主机;
  • n-Tier
    • 包含超过 3 个数量的 Tier,比如一个系统有 PC、MSMQ 服务器、中间件等等构成;

1.4.2.1 表示层

什么是表示层 采用以 Browser/Server 结构为基础的 Web 应用模式,

  • 职责
    • 向用户展示特定的业务数据;
    • 采集用户的信息和操作
    • 核心:用户至上,兼顾简介 CGI 技术 使用 Web 服务器充当客户端浏览器和 CGI 程序进程之间的网关,将结果合称为 HTML 网页描述格式,将计算结果的 HTML 网页描述文本传输给 Web 服务器,由 Web 服务器经过网络转发给用户浏览器; 对于 CGI 技术的改进:使用脚本引擎运行含有嵌入代码的 HTML
  • 包含 ASP、JSP 和 PHP 都使用这种技术
  • 当 Web 服务器接收到用户端的请求时,自动启动执行环境,并将用户所请求的含有嵌入代码的动态网页描述文本交给脚本引擎执行; 对应技术与产品
  • 技术:ASP、JSP、PHP; 表示层与软件体系风格的关系
  • 随着软件范型以及设计模式等构造方式的发展,对于表示层的构造有多种多样的应用框架,使得表示层的构造维护扩展更加统一和方便;

1.4.2.2 业务逻辑层

什么是业务逻辑层 用于处理复杂的应用规则,建立在配置型组件范型之上;

  • 职责
    • 从 UI 中获取用户指令和数据,执行业务逻辑代码;
    • 从 DAL 中获得数据,供 UI 使用;
  • 机制
    • UI -> BLL -> UI
    • UI -> BLL -> DAL -> BLL -> UI 对应技术
  • COM+技术、EJB 技术、Spring 技术 什么是 COM+技术
  • 使用 COM+应用程序进行抽象,抽象一个具体应用的逻辑规则实现的组件集合;
  • 实施步骤
      1. 建立可配置组件;
      1. 可配置组件的安装以及配置;
      1. 客户端调用可配置组件;
      1. 生成客户端代理;
      1. 导出可直接部署的应用包; Spring 框架与配置型组件关系
  • 对于中小型应用而言,COM+和 EJB 技术过于臃肿,因此可以使用 Spring 技术;
  • 什么是 Spring 框架:
    • 将组件之间的依赖关系外置在配置文件之中,通过控制反转(IoC)技术,动态实现组件依赖关系的耦合,通过容器机制管理组件实例的运行,但对组件的实现没有太多的代码侵入和污染(普通的 Java Beans 组件和 POJO 对象都可以直接参与运行); Spring 技术特点
  • AOP:面向切面编程;
    • 允许通过分离应用的业务逻辑与系统服务,进行内聚性开发,应用对象只实现它应该做的业务逻辑
  • IoC:控制反转;
    • 将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制,指导我们如何设计出松耦合、更优良的程序;
    • 把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象; Spring 优点
  • Java EE 更加容易使用;
  • 代码更易于测试;
  • Java Bean 提供的高效配置,易于分析;

1.4.2.3 数据层

什么是数据层 数据层为整个应用程序提供数据服务,涉及大存储量的数据资源,需要借助外部存储器实现;

  • 职责
    • 执行对数据的操作,跟数据源打交道;
  • 发展变化
    • 文件系统 -> DBMS -> ODBC 和基于对象的模型 -> ORM; 持久化
  • 持久化层:将业务逻辑与数据访问相分离;
  • 为什么要持久化
    • 封装了数据访问细节,为大部分业务逻辑提供面向对象 API;
    • 可以减少访问数据次数,增加应用程序速度; ODBC
  • 什么是 ODBC:类似于一种软件驱动程序,提供了应用程序与数据库之间的访问权限;ODBC 使得应用程序不会受制于某种专用的 SQL 语言,应用程序可以以自己的格式接受与发送数据; 最开始:数据服务的实现实施的嵌入到应用逻辑代码当中,数据存储基本上使用基本的操作系统中文件系统的存储格式;提出:为应用开发建立一致的数据服务访问模式; 对应技术
  • Hibernate 技术

1.4.3 分析 3-Tier 之 ORM 技术

什么是 ORM 技术 ORM 在基于对象模型的业务逻辑层和基于关系模型的数据层之间建立一个持久化处理耦合层,实现对象模型与关系模型之间的自动映射,将它们两者隔离,进而使得业务逻辑层的开发直接以对象为基础,进行持久化设计;

  • 核心:将对象的持久化单独抽象,建立单独的数据持久化处理层; ORM 使用示例
  • 数据库的表(table) --> 类(class)
  • 记录(record,行数据)--> 对象(object)
  • 字段(field)--> 对象的属性(attribute) ORM 的作用
  • 简化数据访问:数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
  • 提高开发效率:ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。
  • 提高代码质量:
    • 它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰;
    • 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解;
    • 不必编写性能不佳的 SQL。 ORM 技术案例
  • MyBatis、Hibernate

1.4.4 对 3-Tier 结构多层之间集成

集成核心原则

  • 保证各层之间的松耦合特性; Struts 和 Hibernate 集成

1.5 SOA 与 ROA 技术

1.5.1 SOA 基本概念

SOA 的产生

  • 服务模型发展 -> Web 应用模式发展 -> 服务计算范型 -> 面向服务的体系结构(SOA); 服务模型的作用

  • 完善了面向互联网环境的人类使用方式,为互联网环境中进行面向服务的应用程序的设计与开发建立了完善的计算机应用开发的逻辑视图;

  • 互联网中的所有服务及其访问接口是基本的系统功能调用接口,通过这些接口可以开发面向互联网环境的应用程序; 什么是 SOA SOA 以服务模型为基础,定义了部署服务和管理服务的方式,不涉及具体的技术和标准,分离了业务分析和服务开发,提供了一种统一的描述语言将现有系统和新系统集成;

    SOA 特点

  • 具有高度的伸缩性、可扩展性、灵活演化能力; SOA 实现方法

  • Web Service

  • 服务注册表

  • 企业服务总线 SOA 基本操作

  1. 服务定义和描述: 在 SOA 中,首先需要定义和描述服务。这包括确定服务的功能、输入和输出,以及服务的接口描述;
  2. 服务注册和发现: SOA 系统通常包含服务注册和发现的机制,使得服务可以被动态地发现和使用。服务注册中心用于存储服务的元数据,以便其他服务可以查询并了解可用的服务。
  3. 服务发布和订阅: 发布/订阅模式是一种在 SOA 中常见的通信机制。服务可以发布消息,而其他服务可以订阅这些消息,从而实现松散耦合的通信。
  4. 安全性和身份验证: 由于服务可能在分布式环境中运行,确保通信的安全性和对服务的身份验证是关键的。这包括访问控制、身份验证和数据加密等方面的操作。

1.5.2 ROA 基本概念

什么是 ROA 面向资源的架构 (ROA) 是一种架构风格,它提供了广泛、可扩展、灵活且与传输无关的架构,它无状态的,并以资源为中心;

  • 资源 :面向资源的架构 (ROA) 范式建立在资源的概念之上:资源是一个独立的、可识别的实体,其状态可以被分配一个统一的资源定位符 (URI);
  • 服务:服务代表所请求操作的执行,而资源代表可通过一致的标准化接口进行管理的分布式组件; ROA 的四个概念
  • 资源:资源是信息的逻辑表示,可以用 XHTML、JSON 和 XML 表示;
  • URI:统一资源标识符,包含资源名称和地址的字符序列,用于标识逻辑或物理资源;
  • 表述
  • 链接和连通性 ROA 的操作 ROA 需要有统一接口,由一组定义良好的方法来操作应用程序中的资源; 例如HTTP 提供了以下可能通常需要在任何应用程序中执行的常见操作:
  • HTTP GET – 获取一个资源
  • HTTP POST – 创建新资源
  • HTTP PUT – 修改一个存在的资源
  • HTTP DELETE – 删除一个存在的资源

1.5.3 ROA 和 SOA 的关系

相同点

  • 是用于实现健壮、可扩展的分布式应用程序架构的架构设计模式,分布式架构由通过定义良好的接口在网络上使用的组件组成;
  • 在 ROA 中,这些组件被称为资源,而在 SOA 中,它们被称为服务; 不同点
  • 优缺点
    • SOA 优于 ROA 的主要优点是更成熟的工具支持,XML 请求的类型安全性;
    • ROA 的主要优势在于易于实施,设计敏捷性以及轻巧的事物处理方法;
  • ROA 是数据模型上的 API 包装器,SOA 是功能模块上的 API;
  • ROA 用于提供 CRUD 操作,SOA 用于在运行时链接模块;
  • ROA 使 API 使用者避免更改数据模型, SOA 允许直接替换模块,从而简化了部署和定制

1.6 网页相关

1.6.1 静态网页与动态网页

什么是静态网页 以 HTML 语言描述的页面为基本单元,通过超链接实现信息页面之间的语义链接; 什么是动态网页 指在网页文件当中包含了程序代码,通过后台数据库与 Web 服务器的信息交互,由后台数据库提供实时数据更新和数据查询服务; 动态网页能够根据不同时间和不同访问者而显示不同内容,若常见的 BBS 留言、购物系统的网页,都使用动态网页实现; 动态网页基本原理 动态网页是基本的 HTML 语法规范和 Java、VB 等高级程序语言、数据编程等多种技术的融合,以实现对网站的内容和风格的高效、动态和交互式的管理;

1.6.2 动态网页发展的三个阶段

  • 基本动态网页: 最初的动态网页是通过服务器端的脚本语言生成简单的动态内容,以响应用户的请求。这种方式主要关注于用户与服务器之间的简单交互,比如表单提交和数据展示;
  • Web 2.0时代: 在Web 2.0时代,动态网页的发展更加注重用户体验和交互性。使用AJAX(Asynchronous JavaScript and XML)技术,可以在不刷新整个页面的情况下异步加载数据,实现更流畅的用户界面。社交媒体的崛起也是这个阶段的一个特征,用户可以共享、评论和交互,网站更加社交化;
  • 单页面应用(SPA)和现代 Web 框架: 最近的发展趋势是构建单页面应用,其中整个应用在用户首次加载时加载,然后通过异步请求更新页面内容。现代的前端框架,如 React、Angular 和 Vue. Js,提供了强大的工具和架构,使得开发者可以更容易地构建复杂的动态 Web 应用,同时提供高度的用户交互性和实时性。这一阶段的重点在于提供快速、响应迅速且富有交互性的用户体验。

1.6.3 动态网页生成静态网页

生成过程简述 动态网页程序生成对应的静态网页的过程称为“静态化”;

  • 静态化是将动态网页在特定时刻或事件触发时的内容、数据或状态捕获并固化成静态 HTML 页面的过程;
  • 目的:提高网站的性能、减少服务器压力、简化页面的加载和呈现过程; 运行结果
  1. 内容生成与捕获: 动态网页在用户请求时由服务器生成内容。静态化过程会模拟这个请求,捕获网页在特定条件下的内容。这可能涉及模拟用户的请求,触发相应的动态元素生成,如表单提交、数据库查询等;
  2. 数据预处理: 一些动态网页依赖于实时数据或特定用户状态。在静态化过程中,这些数据可能需要被预先处理或静态化,以确保静态页面在展示时可以正确呈现。这可能需要提前准备静态数据或者假定一些默认状态;
  3. 页面生成: 通过捕获到的内容和数据,生成静态HTML文件。这个文件会包含动态页面在特定时刻的内容快照,可能会包括一些静态化的 JavaScript 和 CSS 资源;
  4. 缓存与更新策略: 静态化页面需要考虑缓存和更新策略,确保页面内容在更新时可以及时得到更新。有时,静态页面会设置缓存时间,在一段时间后再次静态化或重新请求动态内容,以保持页面内容的新鲜度;
  5. 部署与替换: 生成的静态页面需要替换原始的动态页面,以便用户在访问网站时能够得到静态化后的内容。这可能涉及到服务器端的文件替换或更新发布流程。