软件架构师是如何工作
经过阅读王概凯老师的《架构漫谈》一书,了解到了,什么是架构,如何去理解架构,如何对架构进行切分等一系列问题。对于一款软件来说必须要有架构的层次的,对于大学来说我们所接触的东西往往都是独立的较小的东西,对架构的感觉比较浅显,事实上,我们平时对一个大的问题进行切分用到的就是系统架构的思想,也就是老师对我们常说的复杂问题简单化(将一个大的问题进行切分,切分成一个个小的模块,对每一个模块进行处理),简单问题精细化。对于架构产生的原因文中也阐述的很详细:首先任务必须由人来执行,而每个人的能力有限(每个人都有自己的强项)、每个人的时间也有限(这就需要把自己不擅长的工作分解出去,交给适合的人去做)、随着社会的不断发展人们对于目标系统也有了更高的要求、目标系统的复杂性使得单个人完成这个条件变得困难。
架构实际上就是指人们根据自己对世界的认识,为解决某种问题,主动地、有目的地去识别问题,并进行分解、合并,解决这个问题。架构的产出物,自然就是对问题的分析,以及解决的方案:包括拆分的原则以及理由,沟通合并的原则以及理由,以及拆分,拆分出来的各个部分和合并所对应的角色和所需要的核心能力。总的来说,把一个整体(完成人类生存的所有工作)切分成不同的部分,由不同角色来完成这些分工,并通过建立不同的部分相互沟通的机制,是的这些部分能够有机的结合为一个整体,并完成这个整体所需的所有活动。架构要解决的问题就是对目标系统进行边界的界定,然后对目标系统按照某个原则进行切分,切分的原则要便于不同的角色,对切分出来的部分并行或串行开展工作,要对这些切分出来的部分设置沟通机制,使得这些部分之间能够进行有机的联系,合并组装成为一个整体部分,便于完成目标系统的所有工作。
对于我们大多数时候来说都是在考虑如何去解决这个问题,怎么实现这个问题,可是往往做成来的东西并不符合真正的实际需要,只能是生活在象牙塔里的实验程序,与真正的工程代码还差的很多。就想文中所说的“切一半土豆放锅里”,根据故事中的男主人公的自己的理解完全正确,但是符合实际的需求吗?答案很显然,他完全脱离了实际的需求,原因就是他只关注与问题的本身,并没有考虑到这个问题的对象,目标问题到底是谁的问题,这个问题到底是服务于什么样的情况。所以架构的首要问题就是确定问题的边界,发现问题永远比解决问题重要的多。要想正确的认识问题必须明确:1.这是谁的问题2.有什么问题。
确定了问题边界之后就是对系统进行切分了,切分就是对利益的一种调整,架构的切分实际上就是一个系统的模型,对于一个整体问题,有多少相关方,每个相关方需要承担哪些权利和义务,不同的相关方是如何结合起来完成系统的整体任务的。就是把在时间上连续的动作,切分成时间上可以并行的动作,在空间上横向扩展,这样就可以根据不同的利益关系分配任务,多方协作,同时开展工作,然后进行组合,完成整个系统的开发。
那么如何做一名架构师呢,首先架构师必须是一个领导者,有权利调动这个组织的架构,才能发挥架构师的作用把利益落实到实处,从更好的角度去分配解决问题,去平衡别人的利益甚至调整别人的利益。在实际的项目中架构师必须能够超越对时间的恐惧 -- 也就是说必须具备了一定程度的自信,哪怕是装的,去真正的发现问题的主体,识别真正的问题,并把这个行为变成为自己面对问题的第一反应。架构师还必须要明白,所给出的解决方案 -- 架构的分拆、合并方案,只有让问题的主体的权责对等,才能够真正的解决别人的问题。一般明白了问题的主体,以及主体的利益所在,做到这一点也没有问题。
对于软件开发工作者而言,在对代码做架构拆分时,同样也必须管理好架构拆分后所形成新组件的全生命周期。利用架构的思想切分软件模块,发挥各方面优势快速构建具有优势的软件。