明晰软件架构与数据结构
相信大多软件工程师在谈及软件架构(software architecture)时立刻会联想到数据结构(data structure),这是正常的反应。但是,有些工程师却误以为软件架构就完全是关于数据结构,这就不对了。之所以将软件架构与数据结构在本文中并提讨论,是为了让我们对之有更清晰的认识。读者后面会明白,这种清晰的认识对于我们的工作是有益的。
数据结构在Wikipedia上的定义是:为了有效使用数据而在计算机中存储和组织数据的特定方法。这一定义说明了为什么我们又称之为算法。同样是在Wikipedia上,我们能找到对于软件架构的定义:一个系统所需结构的集合,包括软件元素(element)、元素间的关系和属性。定义中的“元素”是一个很宽泛的称呼,即可以指软件组件(component),也可以指一个独立的子设备。
单从定义来看,软件架构与数据结构具有不同的抽象层次,前者更放眼于功能,后者更着力于效率。为了读者能更好地理解这种层次之别,让我们以软件开发流程中的两个关键步骤为例加以说明。软件开发的设计阶段存在概要设计和详细设计两大步骤,概要设计应重点阐述软件架构,而详细设计应着力于解释数据结构。我们都知道,在开发过程中概要设计先于详细设计,因而可以推测出软件架构处于更高的抽象层次。我看到过不少软件概要设计文档一上来就讲数据结构,这是文档的作者对于软件架构与数据结构没有加以明晰的缘故。
做软件设计首当其冲的不是数据结构设计,而是架构设计,这一点无论怎样规模的软件都正确。架构设计强调的是设计概念(我有时也称之为模型),即软件“长什么样”。对于实现同样功能的软件模块,在有概念和没有概念时所设计出来的数据结构会很不一样。即使采用的算法相同,但命名很有可能不同,且有概念的命名更具可读性。因此,“先架构后结构”的方法,有助于写出更具可维护性的代码。现实中,之所以存在大量难以维护的代码,正是因为设计者省去了概念塑造这一步骤。
另一点需要指出的是,软件架构设计与数据结构设计对工程师的能力要求并不完全相同。软件架构设计需要更多的是概念能力,即将细节进行一定的抽象和概括的能力。数据结构设计所需的能力却是对于计算机体系结构、编程语言和各种算法的掌握。
分清软件架构与数据结构的意义在于:
1) 方便沟通。不至于他人在说软件架构时,我们却只想着数据结构。
2) 明白架构设计的重要性。架构设计用于引导数据结构设计,数据结构设计是用来表达架构的。
3) 理解架构设计与数据结构设计所需的能力之别,而不至于认为“数据结构是软件的一切”。
名称栏目:明晰软件架构与数据结构
标题网址:http://scyanting.com/article/gdpdop.html