欢迎来到天天文库
浏览记录
ID:26575192
大小:1.93 MB
页数:22页
时间:2018-11-27
《架构师逻辑技术思维与分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.架构师的逻辑技术思维分析......目录一、抽象思维3二、分层思维8三、分治思维11四、演化思维16五、如何培养架构设计思维19结论21......一、抽象思维如果要问软件研发/系统架构中最重要的能力是什么,我会毫不犹豫回答是抽象能力。抽象(abstraction)这个词大家经常听到,但是真正理解和能讲清楚什么是抽象的人少之又少。抽象其实是这样定义的:对某种事物进行简化表示或描述的过程,抽象让我们关注要素,隐藏额外细节。举一个例子,见下图:......你看到什么?你看到的是一扇门,对不对?你看到的不是木头,也
2、不是碳原子,这个门就是抽象,而木头或者碳原子是细节。另外你可以看到门上有个门把手,你看到的不是铁,也不是铁原子,门把手就是抽象,铁和铁原子是细节。......在系统架构和设计中,抽象帮助我们从大处着眼(getourmindaboutbigpicture),隐藏细节(temporarilyhidedetails)。抽象能力的强弱,直接决定我们所能解决问题的复杂性和规模大小。下图是我们小时候玩的积木,我发现小时候喜欢玩搭积木的,并且搭得快和好的小朋友,一般抽象能力都比较强。上图右边的积木城堡就是抽象,这个城堡如果你
3、细看的话,它其实还是由若干个子模块组成,这些模块是子抽象单元,左边的各种形状的积木是细节。搭积木的时候,小朋友脑袋里头先有一个城堡的大图(抽象),然后他/她大脑里头会有一个初步的子模块分解(潜意识中完成),然用利用积木搭建每一个子模块,最终拼装出最后的城堡。这里头有一个自顶向下的分治设计,然后自底向上的组合过程,这个分治思维非常重要,我们后面会讲。......我认为软件系统架构设计和小朋友搭积木无本质差异,只是解决的问题域和规模不同罢了。架构师先要在大脑中形成抽象概念,然后是子模块分解,然后是依次实现子模块,最
4、后将子模块拼装组合起来,形成最后系统。所以我常说编程和架构设计就是搭积木,优秀的架构师受职业习惯影响,眼睛里看到的世界都是模块化拼装组合式的。抽象能力不仅对软件系统架构设计重要,对建筑、商业、管理等人类其它领域活动同样非常重要。其实可以这样认为,我们生存的世界都是在抽象的基础上构建起来的,离开抽象人类将寸步难行。这里顺便提一下抽象层次跳跃问题,这个在开发中是蛮普遍的。有经验的程序员写代码会保持抽象层次的一致性,代码读起来像讲故事,比较清晰易于理解;而没有经验的程序员会有明显的抽象层次跳跃问题,代码读起来就比较累
5、,这个是抽象能力不足造成。举个例子:......一个电商网站在处理订单时,一般会走这样一个流程:1.更新库存(InventoryUpdate)2.打折计算(Discounting)3.支付卡校验(PaycardVerification)4.支付(Pay)5.送货(Shipping)......上述流程中的抽象是在同一个层次上的,比较清晰易于理解,但是没有经验的程序员在实现这个流程的时候,代码层次会跳,比方说主流程到支付卡校验一块,他的代码会突然跳出一行某银行API远程调用,这个就是抽象跳跃,银行API调用是细节
6、,应该封装在PaycardVerification这个抽象里头。二、分层思维除了抽象,分层也是我们应对和管理复杂性的基本思维武器,如下图,为了构建一套复杂系统,我们把整个系统划分成若干个层次,每一层专注解决某个领域的问题,并向上提供服务。有些层次是纵向的,它贯穿所有其它层次,称为共享层。分层也可以认为是抽象的一种方式,将系统抽象分解成若干层次化的模块。......分层架构的案例很多,一个中小型的SpringWeb应用程序,我们一般会设计成三层架构:......操作系统是经典的分层架构,如下图:TCP/IP协议栈
7、也是经典的分层架构,如下图:......如果你关注人类文明演化史,你会发现今天的人类世界也是以分层方式一层层搭建和演化出来的。今天的互联网系统可以认为是现代文明的一个层次,其上是基于互联网的现代商业,其下是现代电子工业基础设施,诸如此类。三、分治思维分而治之(divideandcombine或者splitandmerge)也是应对和管理复杂性的一般性方法,下图展示一个分治的思维流程:......对于一个无法一次解决的大问题,我们会先把大问题分解成若干个子问题,如果子问题还无法直接解决,则继续分解成子子问题,直到
8、可以直接解决的程度,这个是分解(divide)的过程;然后将子子问题的解组合拼装成子问题的解,再将子问题的解组合拼装成原问题的解,这个是组合(combine)的过程。面试时为了考察候选人的分治思维,我经常会面一个分治题:给你一台8G内存/500G磁盘空间的普通电脑,如何对一个100G的大文件进行排序?假定文件中都是字符串记录,一行约100个字符。......这是一个典型的分治问题,10
此文档下载收益归作者所有