今天阅读了架构漫谈系列博客,作者使用了幽默形象的语言向我们展示了什么是架构,认识概念是理解架构的基础,如何做好架构,什么是软件,软件架构到底解决了什么问题,如何做好架构师以及从架构角度来看如何写好代码这些问题,对此,读过之后,我也有一些自己的理解。
首先什么是架构,作者引了一个人类集体生活的例子,形象生动,容易理解,由这个例子,把一个整体(完成人类生存的所有工作)切分成不同的部分(分工),由不同角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。通过例子,作者解释了什么是架构,架构这个词语不但适合于人类社会生活,也更适用于软件设计当中,总结一下,架构就是:
- 根据要解决的问题,对目标系统的边界进行界定。
- 并对目标系统按某个原则的进行切分。切分的原则,要便于不同的角色,对切分出来的部分,并行或串行开展工作,一般并行才能减少时间。
- 并对这些切分出来的部分,设立沟通机制。
- 根据 3,使得这些部分之间能够进行有机的联系,合并组装成为一个整体,完成目标系统的所有工作。
认识概念是理解架构的基础,架构实际上解决的是人的问题,而概念是人认识这个世界的基础,自然概念的认识就非常的重要。每个概念实际上所解决的,还是人遇到的某个特定的问题,我们把解决问题的解决方案,给定了一个名字,这个名字就是对应的某个特定的概念。因此如何有效的认识概念就很好理解了,概念是代表一个作用,而不是具体的某个东西。根据架构的定义,要做好架构所首先必须具备的能力,就是能够正确的认识概念,能够发现概念背后所代表的问题,进而才能够认识目标领域所需要解决的问题,这样才能够为做好架构打好基础。
认识了概念之后就是如何做好架构,如何做好架构有俩个要点,识别问题和架构切分。如何识别问题呢?所有的概念基本都有一个很大的问题,就是缺乏主语。而我们大家都心照不宣的忽略这个主语,沟通的时候也都以为大家都懂得对方说的主语是谁,结果大家都一起犯错误。识别问题的一个最大的前提就是要搞清楚:是谁的问题。这个搞清楚了,问题的边界也就跟着确定了,再去讨论问题才有意义。正确的识别问题就要做到这是谁的问题,搞清问题的根源,然后再识别他有什么问题。切分与建模实际上切分的过程就是建模的过程,每次对大问题的切分都会生成很多小问题,每个小问题就形成了不同的概念。这也是系列第二篇文章尝试表达的。这些不同的概念大部分时候人们自发的已经建好了,架构师更多的是要去理解这些概念,识别概念背后所代表的的人的利益。比如人类社会按照家庭进行延续,形成了家族,由于共享一片土地资源,慢慢形成了村庄,村庄联合体,不同地域结合,形成了国家。由于利益分配的原因,形成了政权。每次政权的更迭,都是利益重新分配的动力所决定的。
如何做好架构师:成为架构师的前提条件、如何发现“是谁的问题”、架构师的权利和义务等话题。正如作者所说,架构师必须是一个组织的领导人,有权利调动这个组织的架构,才能够更好的发挥架构师的作用,更好的把利益的调整落到实处。架构师的前提条件如果一个人在工作中,只是致力于完成自己的工作,以做好自己的工作为主要目标,那么最多只能成为一个工匠,无法成为一个架构师。因为这个过程解决的还是自己的问题,并没有时间的压力,可以随意什么时候做完都可以。架构师的权利和义务架构师是要去平衡别人的利益,甚至会调整别人的利益的。一旦架构师是全心全意的为别人的利益服务,自然而然的架构师就拥有了强有力的影响力,肯定会是一个leader。但是只是民意上的leader是没有用的,不能完全发挥架构师的能量。
架构师必须是一个组织的领导人,有权利调动这个组织的架构,才能够更好的发挥架构师的作用,更好的把利益的调整落到实处。所以很多公司设了很多架构师的职位,但是并不具备调动组织架构的权利,那么这个架构师的职位一定是形同虚设。架构师精通某项技术,能够从本质上类比,触类旁通其他技术,对等所有技术,只有合适和不合适,没有喜欢和不喜欢。视野开阔,了解不同技术的优缺点。知道使用某项开源技术实现某项业务需求,能够辨别重复造轮子。精通设计模式,但又不泛用。把系统拆分成多个子系统或模块。模块之间尽量松耦合,使得原先串行的开发任务变得可以并行发展。能清楚系统的瓶颈在什么地方, 不断定位技术难度,开发进度,性能,内存等个方面的瓶颈。不断调整骨干力量解决瓶颈,在风险爆发之前消除隐患。能做好前瞻性设计,预判到需求可能产生的变化。