架构师的逻辑技术思维分析范文.docVIP

  • 1
  • 0
  • 约5.66千字
  • 约 22页
  • 2018-12-28 发布于安徽
  • 举报
完美WORD格式整理 范文.范例.指导 架构师的逻辑技术思维分析 目 录 TOC \o 1-3 \h \z \u HYPERLINK \l _Toc520824793 一、抽象思维 PAGEREF _Toc520824793 \h 3 HYPERLINK \l _Toc520824794 二、分层思维 PAGEREF _Toc520824794 \h 8 HYPERLINK \l _Toc520824795 三、分治思维 PAGEREF _Toc520824795 \h 11 HYPERLINK \l _Toc520824796 四、演化思维 PAGEREF _Toc520824796 \h 16 HYPERLINK \l _Toc520824797 五、如何培养架构设计思维 PAGEREF _Toc520824797 \h 19 HYPERLINK \l _Toc520824798 结论 PAGEREF _Toc520824798 \h 21 一、抽象思维 如果要问软件研发/系统架构中最重要的能力是什么,我会毫不犹豫回答是抽象能力。抽象(abstraction)这个词大家经常听到,但是真正理解和能讲清楚什么是抽象的人少之又少。抽象其实是这样定义的: 对某种事物进行简化表示或描述的过程,抽象让我们关注要素,隐藏额外细节。 举一个例子,见下图: 你看到什么?你看到的是一扇门,对不对?你看到的不是木头,也不是碳原子,这个门就是抽象,而木头或者碳原子是细节。另外你可以看到门上有个门把手,你看到的不是铁,也不是铁原子,门把手就是抽象,铁和铁原子是细节。 在系统架构和设计中,抽象帮助我们从大处着眼(get our mind about big picture),隐藏细节(temporarily hide details)。抽象能力的强弱,直接决定我们所能解决问题的复杂性和规模大小。 下图是我们小时候玩的积木,我发现小时候喜欢玩搭积木的,并且搭得快和好的小朋友,一般抽象能力都比较强。 上图右边的积木城堡就是抽象,这个城堡如果你细看的话,它其实还是由若干个子模块组成,这些模块是子抽象单元,左边的各种形状的积木是细节。搭积木的时候,小朋友脑袋里头先有一个城堡的大图(抽象),然后他/她大脑里头会有一个初步的子模块分解(潜意识中完成),然用利用积木搭建每一个子模块,最终拼装出最后的城堡。这里头有一个自顶向下的分治设计,然后自底向上的组合过程,这个分治思维非常重要,我们后面会讲。 我认为软件系统架构设计和小朋友搭积木无本质差异,只是解决的问题域和规模不同罢了。架构师先要在大脑中形成抽象概念,然后是子模块分解,然后是依次实现子模块,最后将子模块拼装组合起来,形成最后系统。所以我常说编程和架构设计就是搭积木,优秀的架构师受职业习惯影响,眼睛里看到的世界都是模块化拼装组合式的。 抽象能力不仅对软件系统架构设计重要,对建筑、商业、管理等人类其它领域活动同样非常重要。其实可以这样认为,我们生存的世界都是在抽象的基础上构建起来的,离开抽象人类将寸步难行。 这里顺便提一下抽象层次跳跃问题,这个在开发中是蛮普遍的。有经验的程序员写代码会保持抽象层次的一致性,代码读起来像讲故事,比较清晰易于理解;而没有经验的程序员会有明显的抽象层次跳跃问题,代码读起来就比较累,这个是抽象能力不足造成。举个例子: 一个电商网站在处理订单时,一般会走这样一个流程: 1. 更新库存(InventoryUpdate) 2. 打折计算(Discounting) 3. 支付卡校验(PaycardVerification) 4. 支付(Pay) 5. 送货(Shipping) 上述流程中的抽象是在同一个层次上的,比较清晰易于理解,但是没有经验的程序员在实现这个流程的时候,代码层次会跳,比方说主流程到支付卡校验一块,他的代码会突然跳出一行某银行API远程调用,这个就是抽象跳跃,银行API调用是细节,应该封装在PaycardVerification这个抽象里头。 二、分层思维 除了抽象,分层也是我们应对和管理复杂性的基本思维武器,如下图,为了构建一套复杂系统,我们把整个系统划分成若干个层次,每一层专注解决某个领域的问题,并向上提供服务。有些层次是纵向的,它贯穿所有其它层次,称为共享层。分层也可以认为是抽象的一种方式,将系统抽象分解成若干层次化的模块。 分层架构的案例很多,一个中小型的Spring Web应用程序,我们一般会设计成三层架构: 操作系统是经典的分层架构,如下图: TCP/IP协议栈也是经典的分层架构,如下图: 如果你关注人类文明演化史,你会发现

文档评论(0)

1亿VIP精品文档

相关文档