目录
0.前言
本系列文章旨在软件设计与体系结构的知识点,资料来源四川大学授课内容,可用于期末复习,笔者理解尚浅,文中不正之处静待批正。加粗部分为重点。
1.软件体系结构的概念
软件体系结构(software architecture)的定义:系统的软件架构是对系统进行推理所需的一系列结构,包括软件元素、它们之间的关系以及两者的属性。
software architecture的作用:架构是业务目标与最终系统之间的桥梁
架构的解释:
①架构是一套软件结构
结构(structures)是通过某种关系连接在一起的一组元素
三类体系结构(architecture structures):
1)模块结构(Module structure)
模块结构将系统划分为多个执行单元;静态结构;支持可修改性
2)组件和连接器(C&C)结构(Component-and-connector(C&C) structure)
侧重于各元素在运行时相互作用以执行系统功能的方式;动态结构;支持性能、安全性和可扩展性。
3)分配结构(Allocation structure)
将软件结构映射到系统环境中;支持性能
②架构是一种抽象(abstraction)
接口将元素的细节划分为公共部分和私有部分,而架构则关注接口的公共部分
③每个软件都有一个软件架构
每个系统都由元素及其之间的关系组成。架构可以独立于其描述description(源代码)或规范specification(文档)而存在
④架构包括行为
⑤并非所有架构都是好的架构
一个架构可以允许或阻止系统实现其行为、质量属性和要求
2.系统、企业和软件体系结构
①系统体系结构System architecture(比如数据采集和分析系统)
系统架构将功能映射到硬件和软件上
系统架构涉及整个系统,包括硬件、软件和人
②企业体系结构Enterprise architecture
企业架构是对一个组织的流程、信息流、人员和子单位的结构和行为的描述
③The relationship of three architectures
系统和企业架构为软件架构提供了环境和限制;软件架构必须融入系统和企业
3.体系结构和视图
①对于架构为什么我们需要这么多结构
现代系统往往过于复杂,难以同时掌握
我们在任何时刻都只关注软件系统的一个结构
②视图view
定义:一个视图是一组连贯的架构元素的表示,由系统利益相关者编写,也由系统利益相关者阅读。
视图与结构的关系:架构设计结构;架构记录这些结构的视图;视图是结构的一种表示方法
③模块结构Module structures(Elements:module of some kinds,Relation:is a...or use
模块结构是一个系统的组成结构;用UML图来表示:类图、对象图和包图等
模块结构的作用:每个模块的主要功能是什么;允许使用哪些其他元素;使用和依赖哪些软件;通过通用化或专业化与其他模块相关联
Decomposition structure
Element: Module
Relation: Is a submodule of
Quality Attributes affected: Modifiability可修改性
Uses structure:
Element: Module
Relation: Uses( i.e., requires the correct presence of)
Quality Attributes affected: Subsetability, extensibility子集性、可扩展性
Layer structure
Element: Layer
Relation: Uses the services of
Quality Attributes affected: Portability便携性
Class structure
Element: Class, object
Relation: Is an instance, shares access methods of是一个实例,可共享访问
Quality Attributes affected: Reusability,extensibility可重用性,可扩展性
Data model structure
Element: Data entity
Relation: Data generalizes, specializes
Quality Attributes affected: Modifiability
④C&C structures(Elements: runtime component,Relation: connector)
由 UML 图表表示:顺序图、活动图和状态图等
C&C结构的作用:有哪些主要执行组件;有哪些主要共享数据存储;系统的哪些部分被复制;数据如何在系统中传输;系统的哪些部分可以并行运行
Service structure(动态结构)
Element: Service, registry
Relation: Runs concurrently with, excludes, precedes同时运行\排除运行\先于运行
Quality Attributes affected: Interoperability, modifiability互操作性、可修改性
Concurrency structure(动态结构)
Element: Processes, threads
Relation: Can run in parallel
Quality Attributes affected: Performance, availability性能、可用性
⑤Allocation structures(Elements: module, environmental elements,Relation: map)
由 UML 图表表示:部署图和组件图等
作用:每个软件元素在什么处理器上执行;在开发、测试和系统构建过程中,每个元素都存储在哪些文件目录中?各软件要素在开发团队中的分配情况如何?
Deployment structure
Element: Components, hardware element
Relation: Allocated to, migrates to分配到,迁移到
Quality Attributes affected: Performance, security, availability
Implementation structure
Element: Modules, file structure
Relation: Store in
Quality Attributes affected: Development efficiency发展效率
Work assignment structure
Element: Modules, organizational units模块、组织单位
Relation: Assigned to
Quality Attributes affected: Development efficiency
⑥The relationship among different structures
每种结构都为系统提供了不同的视角和设计方法
这些结构相互依存,一个结构的元素与其他结构的元素相关联
个别项目有时会认为一种结构占主导地位,而忽略其他结构
4.体系结构模式Architectural Pattern
架构模式是一种通用架构
①Layered pattern分层模式
层layer是一组连贯的相关功能
分层模式使用的软件元素之间的关系是严格单向的
层的设计通常是为了隐藏彼此的实现
②Shared-data pattern共享数据模式
共享数据模式包括创建、存储和访问持久数据的组件和连接器
The elements is a repository存储库usually takes the form of a database
The connectors are protocols for managing the data管理数据的协议, such as SQL
③Client-server pattern客户端-服务器模式
客户端-服务器模式是最常用的实用模式
The components are the clients and servers
The connectors are protocols and messages that share among each other to carry out the system’s work
④Multi-tier pattern多层模式
多层模式描述了如何在不同的硬件和软件子集中分配系统的组件
该模式将通用部署结构(generic deployment structure)特殊化
⑤Competence center and platform pattern能力中心和平台模式
该模式专门用于软件系统的工作分配结构
5.怎样才是好的体系结构
①流程建议Process recommendations
单个建筑师或小组被确定为领导者
必须有系统技术要求和明确、优先的定性属性
必须使用所有人都能理解的约定符号,对架构进行详细记录
应评估架构提供系统重要质量属性的能力
架构应允许创建一个骨架系统,并在此基础上逐步增加功能
②产品建议Product (or structural) recommendations
使用信息隐藏、关注点分离和定义明确的接口实现定义明确的功能模块
质量属性应使用众所周知的架构模式和针对每种属性的特定策略
切勿依赖于特定版本的商业产品或工具
将数据生产者与数据消费者分开
不要期望模块与组件之间是一一对应的
每个进程的编写都应使其对特定处理器的分配可以轻松更改,甚至可以在运行时更改
体系结构应以少量的组件交互方式为特征。系统应以相同的方式做相同的事情,这将有助于理解、缩短开发时间、提高可靠性
架构应包含一组特定的资源争用区域,并明确规定和维护其解决方法