在我们这个软件行业,基本可以说得上是每个人都有着自己不同的理解与看法。那我们就要清楚架构这个东西到底是怎么来的。
架构,网上的专业的定义也是存在的,但是这对于我们来说也并不是很清晰。至少我在看完这个定义之后还是依然不是很理解它。在阅读过王概凯的架构漫谈之后,我的认知就比较清晰了。他对于架构举了一个例子,就是把一个整体切分成不同的部分,然后让不同的角色来完成这些分工,并通过建立不同部分相互沟通的机制,使得这些部分能够有机的结合为一个整体,并完成这个整体所需要的所有活动,这就是架构。
软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。那么我们接下来就要了解软件架构的目标了。它要达到的目标也不在少数:1.可靠性。软件系统对于用户的商业经营和管理来说极为重要,因此软件系统必须非常可靠。2.安全性。软件系统所承担的交易的商业价值极高,系统的安全性非常重要。3.可伸缩性。软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。只有这样,才能适应用户的市场扩展得可能性。4.可定制化。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。5.可扩展性。在新技术出现的时候,一个软件系统应当允许导入新技术,从而对现有系统进行功能和性能的扩展。6.可维护性。软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。一个易于维护的系统可以有效地降低技术支持的花费。7.客户体验。软件系统必须易于使用。8.市场时机。软件用户要面临同业竞争,软件提供商也要面临同业竞争。以最快的速度争夺市场先机非常重要。
在理解了架构的基础上,我们就可以开始了解软件架构师了。软件架构师的工作职责是在一个软件项目开发过程中,将客户的需求转换为规范的开发计划及文本,并制定这个项目的总体架构,指导整个开发团队完成这个计划。主导系统全局分析设计和实施、负责软件构架和关键技术决策的。这个职位的要求是很高的,作为一个软件架构师,不仅编程能力要有,突出的沟通能力以及领导素质也是必不可少的。
软件架构师在项目的开发过程中,要注意和分析人员交流,来确保能够理解到客户的实际需求。否则就算项目做的再好,对不上客户的需求也是不行的。然后,架构师在脑海中大概确定程序的大体部分,将这个复杂的系统分解成一个个小的系统。然后分配任务。软件分解是非常重要的。对复杂的系统,特别是前人没有做过的新系统,通常难以一下子设计出合适的架构。在架构设计的初期,通常都要经历一个不断探索的阶段。软件构架师通常根据业务主题,将系统分解为多个子系统,每个子系统聚焦于一个独立的业务主题,子系统间具有清晰的边界。如果没有丰富的经验是做不好这项工作的。此外,软件架构师还需做很多的文档工作,这些文档并不是交付给开发团队的说明性文档。而是某种向上级证明某某方案可行,某某架构有效的证明性文档。这个职位像是一个千面人:需要与上下前后左右的不同角色打交道;多面手:需要了解甚至掌握诸多不同的知识和技能。