程序员必读之软件架构

 

1.什么是架构

       应用程序架构 < 系统架构 < 软件架构

       企业架构:组织结构,着眼与如何组织和利用人员、流程和技术来使企业有效和高效的工作(运转)

      

2.敏捷软件架构是什么

       软件开发的敏捷方法:拥抱变化,快速行动,持续交付,接收反馈

       要想敏捷,就需要高效的表达,要确保每个人都在为相同的目标努力,需要有效的表达你们正在构建的东西是什么样子的

 

3.架构和设计

       所有架构都是设计,所有设计并非都是架构

       架构是重大决策,不能轻易反悔,那会大费周章

 

4.软件架构的好处

       让团队有一个共同的清晰的愿景和路线图,大局观

       技术领导力和沟通协调

       方法和标准的一致性

       对不同层次的听众,用不同层次的抽象结构图来交流

 

5.软件架构角色

       架构驱动力:理解业务目标和管理架构驱动力,其中包括需求(功能性需求和非功能性需求)和环境的限制

       设计软件:建立技术战略、愿景和路线图

       技术风险:发现、减轻和承担技术风险,保证架构的“运转”

       架构演化:贯穿整个软件交付过程,持续的技术领导和对架构的承担。

       编写代码:参与软件交付的实践

       质量保证:引入并坚持标准、知道、原则

       团队合作

      

6.软技能

       领导力、沟通、影响力、指导(辅导)、信心、合作、动力、润滑剂、政治、责任感、授权、保持积极、领域知识(业务知识)

       识别团队类型

              生存型(混乱):需要一种直接指挥和控制的领导风格

              学习型:需要一种指导的领导风格

              自组织型:需要简易化来确保平衡不受影响

      

7.架构驱动力

       功能需求

       质量属性(非功能性需求):性能、可伸缩性、可用性、安全性、审计(日志)、可扩展性、可维护性等。对各项进行提炼,优先级排序

       约束:时间、成本、人员

       原则(如编码规范、自动化测试使用、静态分析工具、分层策略、架构模式)

      

8.协同设计是一把双刃剑,应该有取舍,有决断。

 

9.语境、容器、组件、类

       语境图 > 容器图 > 组件图

       语境图:人物、外部系统

       容器图:软件系统上的逻辑上的可执行文件或过程。描述名称、技术、职责、交互过程。容器包括如web服务器、数据库、文件系统、Windows服务、web浏览器和插件等。

              容器交互:容器间的通信,容器如何工作

                     交互的目的、通信方法、通信方式、通信协议和端口号

              容器图展示了软件架构的高层次形态,以及职责如何分布。他也展示了主要的技术选择以及容器如何相互交流。

       组件图:进一步分解容器,分解为主要的逻辑组件和交互,组件复用、组件依赖、明确技术选择

       对齐架构和代码

       《程序员必读之软件架构》 读书摘要

10.   基础设施架构(物理架构)

       描述软件将会部署到的物理、虚拟硬件和网络。各种硬件和网络组件如何相互融合,进行简短描述。

      

11.部署

       部署就是软件和基础设施之间的映射

       软件安装、部署、配置位置

       内存和cpu如何分配

       主备、热备、冷备

       回滚

       数据复制

      

12.运营和支持(运维)

       程序启动       运行状态诊断       错误信息日志       更改配置是否需要重新启动       有无手动启动程序       是否有旧数据定期归档

      

13.敏捷和架构的冲突

 

14.量化风险

       发生的概率、优先级。风险矩阵

       识别风险,团队协作,头脑风暴

      

15.恰如其分的预先设计

       不能太粗,也不能过细

 

跟《Effective Java 中文版》一样,外国人写的翻译过来的书,其中有些段落中,想表达的意思不直接,有些绕。

相关文章: