Software architecture thinking
Created: March 29, 2021 3:06 PM
Last Edited Time: August 10, 2022 9:56 AM
Status: Done
Type: Architecture
软件架构是什么?
- 软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计
- 与建筑师设计建筑架构起到相同的作用:
- 将软件的所有层次组合在一起
- 便于开发人员和客户理解
- 软件架构的内容:
- 软件系统的组成
- 子系统及其接口元素的选择,以及元素间的协作行为
- 元素如何不断増长成为更大的子系统
- 架构风格
- 架构元素不仅与结构和行为有关,也和
- 功能性 Functionality
- 兼容性 Compatibility
- 可用性 Usability
- 系统弹性 Resilience
- 性能 Performance
- 适应性 Adaptability
- 重用性 Reuse
- 经济和技术的限制和折中 Economic and technology constraints and tradeoffs
- 美学的考虑 Aesthetic concerns
架构具体定义了什么公共元素?
- 关键组件
- 组件之间的关系(结构)和交互
- 忽略了组件中与组件之间交互无关的信息
- 从另一个组件可以观察到的组件行为
- 组件和结构背后的基本原理
组件是什么?
- 可以分布,集成,交付,替换的单元
- 实现关键的功能
- 由组件提供的功能和要求的服务定义
架构约束设计和实施
架构会对设计和实现规定一系列的约束和策略.所以架构的变动会对设计和实现造成巨大影响,所以架构的时候要慎重
软件架构的作用
优点
- 关注点分离(降低了系统的复杂度,便于维护,专人专项)
- 系统完整性和质量(在变更和新增的需求等情况下保持了系统的质量)
- 架构风格(统一的架构风格使得开发成本变小,门槛变低)
- 可预见性(系统把握度高,变更影响范围易于控制)
- 可测试性(降低了测试的接入成本,范围可控)
- 可重用性(减少了冗余代码量,提高开发效率,降低维护成本)
- 组织和项目管理(并行开发,支持分包等)
- 可进化性(系统的拓展性良好,可以随着变化而升级)
- …
如何进行软件架构
架构是在系统搭建的前期进行的
- 架构的成本投资是在系统开发的早期
- 架构的好处是发生在实施和维护阶段
用例驱动开发
- 传统需求记录方式不利于开发维护
- 主要需求和次要需求混杂,界定不够明确
- 缺乏跟踪能力
- 用例可以方便开发了解整体和局部需求
- 用例记录了所有的需求
- 每一个用例都需要组织到用例模型中
- 用例可以使用 UML 和文本描述相结合
- 用例可以提高开发的效率以及后期方便的进行测试
用例的组成
- 基本事件流
- 正常的场景
- 备选事件流
- 边界情况
- 错误情况
架构步骤
- 项目早期开发架构
- 启动阶段着手初期架构雏形
- 精化阶段稳定架构
- 架构由用例驱动
- 最核心的用例有以下两个
- 帮助降低最重要风险的用例
- 对用户来说最重要的用例
- 最核心的用例有以下两个
- 形成架构基线
- 业务分析
- 需求分析
- 对业务进行整理,取舍出架构的侧重点
- 架构的抽象化模型
- 架构的具象化选型(语言,框架,实现方式)
- 架构的丰满与验证