架构
软件架构师对系统的高层视角,或是对系统的抽象。它关注的是某些对完成这个系统有最大帮助的方面,例如,可用性、稳定性,以及灵活性。同时,架构对如何达到这些目的给出了指导和约束。
虽然我们常常把“架构”和“设计”放在一起,总称为“架构设计”,其实从严格意义上来说,“架构”和“设计”是两个概念,这两者的关注点是不一样的。
设计主要是指思考和求证的过程。在这个思考的过程中,针对某个需要解决的问题,提出一些可行的方案,同时给出相应的计划。
一般来说,软件就是用来解决某个问题的,因为这个问题比较大,或是比较复杂,所以往往不得不分解,“分而治之”。大的问题不断被分解,最终成为一个个可以解决的小问题。设计则指明了如何解决这一个个问题,并提出了方案和计划。只有这样,才能最后确保整个软件的问题被解决,也才能确保软件按照计划来进行。
架构和设计是两个不同的概念,它们也出现在不同的阶段。当软件系统的架构确定后,设计就开始了。
架构与系统的业务需求往往是紧密联系的,理论上,架构不是很关注系统最后搭建在哪个技术平台上(例如,J2EE,.NET),但实际上,很多时候我们在思考架构创建的同时,也会考虑系统将要运行的技术平台。
设计是与系统的实现相关。设计将架构所关注的那些高层抽象的需求与具体的技术实现联系起来,从而考虑如何实现系统所需要的稳定性、安全性,甚至考虑采用哪种模式等。在设计阶段,还要决定在以后开发过程中应采用哪种实现方法论进行开发(例如,TDD,DDD,BDD)。
架构与框架
尽管架构和设计都非常重要,但是并非每次创建软件项目都要经历这个过程。我们可能会把架构和设计固化在可重用的代码中,以便在创建其他新的项目时重复使用。那么,我们此时需要的就是一个“框架”:它以编码的方式实现架构和设计,更利于提高重用性和生产效率。
一般的开发过程会从收集和分析需求开始,然后是架构讨论和决策,接下来就是设计。首先是用低级别的概念设计支持架构,然后是真正对最终用户有用的业务概念设计。设计完成之后,开发者通常会花费相当长的时间来实现低级别的代码以支持稍后的业务代码的编写。
在软件世界中,将架构和设计写到框架里面是降低开销、提高重用性的最好方式,所以可以把框架看成是架构和设计得一种积累,经过多个项目的开发,不断地修改和完善,最后使得整个框架在 性能、伸缩性、安全性等方面都能满足需求。
架构与模式
每次谈到架构,冒出的第一反应是:架构就是设计模式,架构就是企业架构模式等诸如此类的想法。相信通过上面的讲述,大家已经清楚了架构和模式的关系。模式是经验得重用,模式对软件开发中出现的一些问题给出了比较好的解决方案。模式的决定和使用,常常是涉及阶段考虑的问题,当然在架构创建的时候它也可以给一些问题提供指导,在这些指导中可能就包含了可以采用什么模式达到什么目的等。在架构和设计中,有时采用了合适的模式,就可以快速地解决某些问题,但是两者绝对不是等同的关系,也不是多多益善的关系。