程序员必读之软件架构
1.什么是架构
应用程序架构 < 系统架构 < 软件架构
应用程序架构关键词:类、组件、设计模式、框架、技术栈
系统架构:在应用程序架构层次之上,由多个应用程序组成,从组件和服务到子系统等更高层次的抽象,包含软件和硬件
软件架构:从代码架构和基础到将代码成功部署到生成环境,这个过程中都相关的重要元素的集合都是软件架构
企业架构:组织结构,着眼与如何组织和利用人员、流程和技术来使企业有效和高效的工作(运转),就是项目管理了
2.敏捷软件架构是什么
软件开发的敏捷方法:拥抱变化,快速行动,持续交付,接收反馈
要想敏捷,就需要高效的表达,要确保每个人都在为相同的目标努力,需要有效的表达你们正在构建的东西是什么样子的
3.架构和设计
所有架构都是设计,所有设计并非都是架构
架构是重大决策,不能轻易反悔,那会大费周章
4.软件架构的好处
让团队有一个共同的清晰的愿景和路线图,大局观
技术领导力和沟通协调
方法和标准的一致性
对不同层次的听众,用不同层次的抽象结构图来交流
5.软件架构角色
架构驱动力:理解业务目标和管理架构驱动力,其中包括需求(功能性需求和非功能性需求)和环境的限制
设计软件:建立技术战略、愿景和路线图
技术风险:发现、减轻和承担技术风险,保证架构的“运转”
架构演化:贯穿整个软件交付过程,持续的技术领导和对架构的承担。
编写代码:参与软件交付的实践
质量保证:引入并坚持标准、知道、原则
团队合作
6.软技能
领导力、沟通、影响力、指导(辅导)、信心、合作、动力、润滑剂、政治、责任感、授权、保持积极、领域知识(业务知识)
识别团队类型
生存型(混乱):需要一种直接指挥和控制的领导风格
学习型:需要一种指导的领导风格
自组织型:需要简易化来确保平衡不受影响
7.架构驱动力
功能需求
质量属性(非功能性需求):性能、可伸缩性、可用性、安全性、审计(日志)、可扩展性、可维护性等。对各项进行提炼,优先级排序
约束:时间、成本、人员
原则(如编码规范、自动化测试使用、静态分析工具、分层策略、架构模式)
8.协同设计是一把双刃剑,应该有取舍,有决断。
9.语境、容器、组件、类
语境图 > 容器图 > 组件图
语境图:人物、外部系统
容器图:软件系统上的逻辑上的可执行文件或过程。描述名称、技术、职责、交互过程。容器包括如web服务器、数据库、文件系统、Windows服务、web浏览器和插件等。
容器交互:容器间的通信,容器如何工作
交互的目的、通信方法、通信方式、通信协议和端口号
容器图展示了软件架构的高层次形态,以及职责如何分布。他也展示了主要的技术选择以及容器如何相互交流。
组件图:进一步分解容器,分解为主要的逻辑组件和交互,组件复用、组件依赖、明确技术选择
对齐架构和代码
10. 基础设施架构(物理架构)
描述软件将会部署到的物理、虚拟硬件和网络。各种硬件和网络组件如何相互融合,进行简短描述。
11.部署
部署就是软件和基础设施之间的映射
软件安装、部署、配置位置
内存和cpu如何分配
主备、热备、冷备
回滚
数据复制
12.运营和支持(运维)
程序启动 运行状态诊断 错误信息日志 更改配置是否需要重新启动 有无手动启动程序 是否有旧数据定期归档
13.敏捷和架构的冲突
14.量化风险
发生的概率、优先级。风险矩阵
识别风险,团队协作,头脑风暴
15.恰如其分的预先设计
不能太粗,也不能过细
跟《Effective Java 中文版》一样,外国人写的翻译过来的书,其中有些段落中,想表达的意思不直接,有些绕。
电子书下载地址
链接: https://pan.baidu.com/s/1spfkku-ZNinc5WaiQ7Nnqw 提取码: xuxu 复制这段内容后打开百度网盘手机App,操作更方便哦