软件架构设计:程序员向架构师转型必备(第二版) 笔记

1 从程序员到架构师 1

1.1 软件业人才结构

1.1.1 金字塔型还是橄榄型? 1

1. 橄榄型:中间大两头小;

 

2. 区分开学历结构和能力结构;学历结构:橄榄型,能力结构:金字塔型;

1.1.2 从程序员向架构师转型 2

1. 软企该怎么做?

2 解析软件架构概念 10

1. 架构的概念很多种,不统一;

2.1 软件架构概念的分类 11

1. 架构的概念很难统一;

2. 本书将概念分为组成派和决策派两大流派,来帮助理解;

2.1.1 组成派 11

1. 软件系统的架构将系统描述为计算组件及组件间的交互;

2. 组成派的两个显著特点:

a. 关注架构实践中的客体--软件;

b. 分析了软件的组成;

2.1.2 决策派 11

1. RUP:Rational Unified Process,Rational统一过程;

2. 软件架构是在一些重要方面做出决策的集合;

3. 两个特点:

a. 关注架构实践的主体--人;

b. 归纳了架构决策的类型;

2.1.3 软件架构概念大观 12

1. 很多牛人的有不同概念定义;

2.2 概念思想的解析 13

2.2.1 软件架构关注分割和交互 13

1. 组件+交互可以将MVC等具体架构设计决策高屋建瓴地抽象地表达出来;

2.2.2 软件架构是一系列有层次的决策 14

1. 架构属于设计,但不是所有设计都属于架构;

2. 架构涉及的决策,往往对整体质量、并行开发、适应变化等方面有着重大影响;

a. 模块如何划分;

b. 每个模块的职责如何;

c. 每个模块的接口如何定义;

d. 模块间采用何种交互机制;

e. 开发技术如何选型;

f. 如何满足约束和质量属性的需求;

g. 如何适应可能发生的变化;

3. 设计往往分层次依次展开;

4. 例子:设计一个硬件设备调试系统;

a. 理解需求;

b. 首轮决策:此时软件系统被高层切分;

c. N步,继续决策--此时软件系统被切分成更小单元;

2.2.3 系统、子系统、框架都可以有架构 17

1. 真实的软件其实是“由组件递归组合而成”;

2. 例子:航空航天领域的系统;极其复杂,总的系统需要配备系统架构师,子系统有时也需要单独配备架构师;

2.3 实际应用(1)--团队对架构看法不一怎么办 13

1.

2.3.1 结合手上的实际工作来理解架构的含义 18

1. 出现不按照架构进行后续的详细设计和编程的现象,有程序员和架构师对架构有不同的理解的原因;

2. 如果一个架构师认为“架构就是通用模块”,那么他可能就不会关心非通用单元的设计;

3. 如果一个架构师认为“架构就是技术选型”,那么他在拍版“Spring+Struts”之后就理所当然地无事可做了;

4. 如果一个架构师认为“投标时讲的架构就是架构的全部”,那么他才不管那“三页幻灯”对程序员的实际开发指导不够呢(因为没有意识到);

5. 结合手上的实际工作来理解架构的含义,是笔者推荐的做法;

2.3.2 这样理解架构对吗? 19

1. 架构设计细致到类,不太现实;

2.3.3 工作中找答案:先看部分设计 19

1. MVC架构和具体的技术无关,我们要不断细化架构方案,这样才能为开发人员提供更多的指导和限制,才能真正降低后续开发的重大技术风险;

2. 工期短,使用第三方SDK包,但是又不想绑定死某个SDK包,用适配器模式增加一个接口层;

 

3 理解架构设计视图

3.1 软件架构为谁而设计 24

1. 不同的人对架构的视角不同,架构要为不同的人而设计;

3.1.1 为用户而设计 25

1.

3.1.2 为客户而设计 26

3.1.3 为开发人员而设计 26

3.1.4 为管理人员而设计 26

3.2 理解架构设计视图 28

3.2.1 架构视图

3.3 运用逻辑视图和物理视图设计架构 30

3.4 开发人员如何快速成长

3.4.1 开发人员应该多尝试设计 33

3.4.2 例子:邮件代发系统 34

分而治之,迭代式开发;

不应先设计逻辑视图再设计物理视图,而是迭代进行相互验证;

4 架构设计过程

4.1 架构设计的实践脉络 41

节奏:看透需求,架构大方向正确,设计好架构的各个方面;

架构早期注重识别:1、重大需求;2、特色需求;3、高风险需求;

6大步骤:

1、需求分析;

2、领域建模;

3、确定关键需求;

4、概念架构设计;

5、细化架构设计;

6、架构验证;

4.2 架构设计速查手册 45

需求沟通,非功能性需求的确定,需求分析主线;

5 需求分析

5.1 愿景分析 54

愿景文档很重要;

不同类型的公司的文档名称不同;

上下文图(PPT或用例图的顶级视图);描述系统和周围事物之间的界限和联系;

愿景分析即需求调研,

愿景=业务目标+范围+Feature+上下文图;

输出《愿景与范围文档》

5.2 需求分析 61

需求捕获、需求分析、系统分析;

相互伴随,交叉进行;

需求捕获输出需求采集卡;

需求分析交付《软件需求规格说明书》;

5.3 掌握的需求全不全 65

软件需求=功能+质量+约束;

任何一个功能都是一个职责责任链构成的;架构就是发现职责,并把功能分配到各个子系统;

质量是完善架构设计的驱动力;

5.5 实际案例 78

关键步骤:三横两纵;横表示顺序执行,纵表示随时进行;

三横:确定系统目标、研究高层需求、建立用例模型;

两纵:需求沟通、需求启发、需求验证;确定非功能需求;

高层需求之确定范围的方法;

6 用例和需求

6.1 用例技术族 89

几种不同的技术:用例图、用例简述(用户故事)、用例规约、用例实现(鲁棒图);

6.2 应用场景 94

7 领域建模

7.1 什么是领域建模 106

领域模型常用:类图、状态图;

7.2 需求人员视角--促进用户沟通,解决分析瘫痪 108

7.3 开发人员视角 113

8 确定关键需求

8.1 什么决定了架构 129

用例驱动论:很多需求和质量都无法用用例来描述;

8.2 关键需求决定了架构 132

8.3 如何确定关键需求 133

8.4 案例-小系统和大系统的架构分水岭 137

架构设计只有合适,没有最好;

9 概念架构设计

9.1 是什么 144

只关注高层组件,给出高层组件的相互关系,不应涉及接口细节;

是直指目标的设计思想、重大选择;

9.2 概述 151

关键需求进,概念架构出的过程;

9.3 左手功能 153

左手功能,右手质量;

鲁棒图的3个元素:边界对象、控制对象、实体对象;

9.4 右手质量 159

10 细化架构设计

10.1 从2视图到5视图 175

2视图:物理视图+逻辑视图;

5视图:逻辑视图、开发视图、运行视图、物理视图、数据视图;

10.2 学会系统思考 177

11 架构验证

11.1 原型设计 194

对感兴趣的问题试试看,故意忽略其他方面的要求;

11.2 架构验证 198

两种验证方法:框架法、原型法;

12 粗粒度功能模块划分

时间: 05-07

软件架构设计:程序员向架构师转型必备(第二版) 笔记的相关文章

Java进阶之路——从初级程序员到架构师,从小工到专家

怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题.希望这篇文章会是你看到过的最全面最权威的回答. 一: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还是要有的.下面几篇文章从思想到实现,为你梳理出常用的数据结构和经典算法. 1-1 常用数据结构 数组.链表.堆.栈.队列.Hash表.二叉树等

挨踢部落故事汇(20):Android程序员的十大转型之路

玖哥是一个来自东北的Android攻城狮,现在定居被誉为"大湖名城,创(chuan)新(xiao)高地"的合肥.知识面极广,不仅广泛涉猎IT相关知识,还热爱文学,性格幽默,被誉为"会搞Android的段子手".他还是一个藏书人士,拥有汗牛充栋的IT书籍,而且每本书都认真阅读过,从不拿书当摆设. 玖哥·Android攻城狮 先说说Android程序员不可能转型的几个方向,以下四个不靠谱方向的靠谱性递减: 首先不会转型iOS,iOS和Android工程师的工作内容都是大

推荐Python程序员进阶阅读的书籍(2015版)

列一下自己过去一年阅读的Python相关书籍,评论是在本人阅读完书籍并完成书中所有测试用例的基础上编写的: <Python Cookbook 3rd>5星 ,绝对值得阅读!直接看英文版吧,中文翻译的如何不太清楚.对于高手就当是复习功课了,总有一些地方记得不是很清楚. <Cython - A Guide for Python Programmers> 5星 by Kurt W. Smith, O'Reilly 2015 如果你想封装一个C的库,或者别人封装的C库在你的平台下不能够使用

黑马程序员_ Objective-c 之block、protocol学习笔记

一):block学习总结 block :用来保存一段代码. 1.block 特点:  1> Block封装了一段代码,可以在任何时候执行   2> Block可以作为函数或者函数的返回值,而其本身又可以带输入参数或返回值  3> 苹果官方建议尽量多用block,在多线程.异步任务.集合遍历.集合排序.动画转场用的很多  4> Block可以在程序运行时凭空产生一个代码保存起来  2.block的标志:^  3.block跟函数很像 1> 可以保存代码  2> 有返回值 

程序员书单_架构设计篇

大象(Thinking in UML) http://download.csdn.net/detail/shenzhq1980/9076189 设计模式之禅http://download.csdn.net/detail/shenzhq1980/9076185 大道至简实践者的思想 http://download.csdn.net/detail/shenzhq1980/9076105 [软件架构设计:程序员向架构师转型必备(第二版)].温昱.扫描版http://download.csdn.net/

飞行的架构师和奔跑的程序员

转:http://www.cnblogs.com/mindwind/p/5196310.html 飞行的架构师和奔跑的程序员 关于程序员和架构师的讨论很多,我想从不同的角度说下. 寻路 当我刚进入软件行业成为一名程序员时,我的理想就是成为一名架构师.架构师这个词的英文叫 Architect,原意是建筑师,因为软件行业参照借鉴了很多建筑行业的概念,所以就借用这个词.我是在学校读书时知道架构师这个名词的,当时很多软件方面的书都是翻译过来的,现在也不知道是谁最早把 Architect 翻译成架构师的了

如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO

引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做得到.但是,会编程和编好程绝对是两码事,同样的程序员,有的人几年之后成为了架构师,有的人却还在不停地coding,只不过ctrl-c.ctrl-v用得更加纯熟了.在中国,编程人员最终的归途无外乎两条:一是转向技术管理,它的终点是CTO:二是继续深入,它的终点是首席架构师,成为CEO的人毕竟是少数.如

软件架构设计系列总结

架构引用维基百科:软件体系结构是构建计算机软件实践的基础.与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础.从和目的.主题.材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟.一个软件架构师需要有广泛的软件理论知识和相应的经验来实施和管理软件产品的高级设计.软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作.逻辑和流程.软件

架构师之炉边夜话一

(以下对话来自软件架构师群) --------------------前奏------------------------ [省长]合肥-研发-brook 23:10:18 我上家公司的技术经理是从工地拎灰桶 [省长]合肥-研发-brook 23:10:22 干起的 [省长]合肥-研发-brook 23:10:30 然后混到现在公司的技术经理 [村民]织&织&猪 23:10:35 如果你想往架构师的路上走,图轻松是不可能成功的. [市长]杭州-Mr.Bug 23:11:27 我已经算是架构