某架构师讲到:架构的本质是管理复杂性,抽象、分层、分治和演化思维是工程师 / 架构师应对和管理复杂性的四种最基本武器
。
后来与其他几位专家沟通,他们也一致认为“抽象能力”是架构师最关键的核心能力。
如何理解这样的抽象能力,举个简单的例子,在设计一个电商网站在处理订单时,一般流程包括:更新库存、打折计算、支付卡校验、支付、送货。整个流程中的抽象是在同一个层次上的
,比较清晰易于理解。经验少的程序员在实现这个流程的时候代码层次会跳,比方说主流程到支付卡校验一块,他的代码会突然跳出一行某银行 API 远程调用,这个就是抽象跳跃
。
- 分层
尽可能将系统的各个模块划分清楚,模块间的调用要有层次感,比如MVC的架构理念就是一种分层思想,将控制器/业务逻辑/数据交互分为主流程的三个模块,他们之间的调用是有层级的,比如首先是控制器,其次是业务逻辑,最后是数据交互。
对复杂的系统业务进行分层,把拥有一定复杂度的相似功能的模块作为子系统独立运行,比如将支付相关的服务提供一套独立的系统供其他系统调用。不同子系统之间的松耦合,将极大的方便系统维护和开发,提升生产应用的稳定性。
将一个业务需求分层,明确每个层次解决什么问题也一目了然,这样系统会显得层次分明、简洁明了。 - 分治
分治算法思想将一个问题等价划分成若干子问题,子问题是可以获得结果的,然后通过汇总最终解决原问题。比如对大文件的分析处理,可以将文件进行拆分,从而解决性能和效率问题;或者结合递归思想,从最小的结果逆向运算得到原问题的解。 - 抽象层次
模块之间的层次关系,有可能是强依赖的纵向应用,比如上述提到的MVC模块划分,也有可能是松耦合的横向应用,比如订单模块与支付模块,它们可能共存于同一个业务逻辑单元被调用,但也可能被独立的访问。 - 抽象跳跃
抽象跳跃指的是代码逻辑混杂,没有很好的区分模块间的调用层次。区分模块的作用在于封装同类型的实现,使得主业务流程的代码有更高的可阅读性。