我曾经去给OSCHINA做过一期有关“软件工程实践”的有奖高手问答 (奖是给提问者的,哈哈),现在来看,许多问题仍然可读之处,因此整理成文字,以为众赏。
原贴在这里:http://www.oschina.net/question/12_78459
本篇的问题是:什么是架构?以及什么是架构师?
答:
几位读者都提到了架构的问题,但架构话题并没有在《大道至简》这本书里讨论过,而在另一本《大道至易——实践者的思想》才有所讨论。不过这里我还是乐于解释一下一些基本的问题,或谈谈我的一些基本的观点。
仅以架构而言,要讨论的问题总的来说就两个方面,一是“范围”,就是项目与项目目标要做多大、多久,做到怎样效果的问题,并且围绕这个“范围”来给出一些合理的方案给开发实施的团队。二是“联接件”,就是如果上述的范围要由多个阶段或多个构件来构成,那么这些范围或构件之间如何关联的,以及如何确保这些关联是长期有效的。
为了简单的说清这个架构的概念,以一个插件的架构来说,就是确定“插件用于补充主体软件的某个功能”,并确定“插件与主体软件之间如何衔接通讯”。那么有了这两点,插件的架构,也就设计完了。把这个模式扩大到一个平台,或一个大型的系统,或者细化到它们的各个局部中去,就是“平台架构”或“系统架构”了。当然,这仅在简单地、形式化地在讨论“架构”这个东西,因为“架构”与规模问题尽管有关系,但并非是一一对应的。不能说“大系统就要架构,小东西就不需要”,这样的认识是不正确的。
架构在根底上来说,是一种系统化的视角。如果你将一个对象理解为“系统”,或“有系统性的”,那么它就必然存在内部的关系与外部的边界——否则,必是离散的,或混沌不清的。而架构的“范围”与“联接件”,谈的就是这个对象的内部关系与外部边界。如果你具有架构思维,那么在你的视角下,凡事、凡物、凡内外,无不如此。
而架构师,要么离散上述关系、肢解上述结构,要么通过明确的方式来固化上述的关系与结构。如是,是做架构。