明晰软件架构与数据结构
发表于:2025-01-29 作者:千家信息网编辑
千家信息网最后更新 2025年01月29日,相信大多软件工程师在谈及软件架构(software architecture)时立刻会联想到数据结构(data structure),这是正常的反应。但是,有些工程师却误以为软件架构就完全是关于数据结
千家信息网最后更新 2025年01月29日明晰软件架构与数据结构相信大多软件工程师在谈及软件架构(software architecture)时立刻会联想到数据结构(data structure),这是正常的反应。但是,有些工程师却误以为软件架构就完全是关于数据结构,这就不对了。之所以将软件架构与数据结构在本文中并提讨论,是为了让我们对之有更清晰的认识。读者后面会明白,这种清晰的认识对于我们的工作是有益的。 数据结构在Wikipedia上的定义是:为了有效使用数据而在计算机中存储和组织数据的特定方法。这一定义说明了为什么我们又称之为算法。同样是在Wikipedia上,我们能找到对于软件架构的定义:一个系统所需结构的集合,包括软件元素(element)、元素间的关系和属性。定义中的"元素"是一个很宽泛的称呼,即可以指软件组件(component),也可以指一个独立的子设备。
单从定义来看,软件架构与数据结构具有不同的抽象层次,前者更放眼于功能,后者更着力于效率。为了读者能更好地理解这种层次之别,让我们以软件开发流程中的两个关键步骤为例加以说明。软件开发的设计阶段存在概要设计和详细设计两大步骤,概要设计应重点阐述软件架构,而详细设计应着力于解释数据结构。我们都知道,在开发过程中概要设计先于详细设计,因而可以推测出软件架构处于更高的抽象层次。我看到过不少软件概要设计文档一上来就讲数据结构,这是文档的作者对于软件架构与数据结构没有加以明晰的缘故。
做软件设计首当其冲的不是数据结构设计,而是架构设计,这一点无论怎样规模的软件都正确。架构设计强调的是设计概念(我有时也称之为模型),即软件"长什么样"。对于实现同样功能的软件模块,在有概念和没有概念时所设计出来的数据结构会很不一样。即使采用的算法相同,但命名很有可能不同,且有概念的命名更具可读性。因此,"先架构后结构"的方法,有助于写出更具可维护性的代码。现实中,之所以存在大量难以维护的代码,正是因为设计者省去了概念塑造这一步骤。
另一点需要指出的是,软件架构设计与数据结构设计对工程师的能力要求并不完全相同。软件架构设计需要更多的是概念能力,即将细节进行一定的抽象和概括的能力。数据结构设计所需的能力却是对于计算机体系结构、编程语言和各种算法的掌握。
分清软件架构与数据结构的意义在于: 1) 方便沟通。不至于他人在说软件架构时,我们却只想着数据结构。 2) 明白架构设计的重要性。架构设计用于引导数据结构设计,数据结构设计是用来表达架构的。 3) 理解架构设计与数据结构设计所需的能力之别,而不至于认为"数据结构是软件的一切"。
单从定义来看,软件架构与数据结构具有不同的抽象层次,前者更放眼于功能,后者更着力于效率。为了读者能更好地理解这种层次之别,让我们以软件开发流程中的两个关键步骤为例加以说明。软件开发的设计阶段存在概要设计和详细设计两大步骤,概要设计应重点阐述软件架构,而详细设计应着力于解释数据结构。我们都知道,在开发过程中概要设计先于详细设计,因而可以推测出软件架构处于更高的抽象层次。我看到过不少软件概要设计文档一上来就讲数据结构,这是文档的作者对于软件架构与数据结构没有加以明晰的缘故。
做软件设计首当其冲的不是数据结构设计,而是架构设计,这一点无论怎样规模的软件都正确。架构设计强调的是设计概念(我有时也称之为模型),即软件"长什么样"。对于实现同样功能的软件模块,在有概念和没有概念时所设计出来的数据结构会很不一样。即使采用的算法相同,但命名很有可能不同,且有概念的命名更具可读性。因此,"先架构后结构"的方法,有助于写出更具可维护性的代码。现实中,之所以存在大量难以维护的代码,正是因为设计者省去了概念塑造这一步骤。
另一点需要指出的是,软件架构设计与数据结构设计对工程师的能力要求并不完全相同。软件架构设计需要更多的是概念能力,即将细节进行一定的抽象和概括的能力。数据结构设计所需的能力却是对于计算机体系结构、编程语言和各种算法的掌握。
分清软件架构与数据结构的意义在于: 1) 方便沟通。不至于他人在说软件架构时,我们却只想着数据结构。 2) 明白架构设计的重要性。架构设计用于引导数据结构设计,数据结构设计是用来表达架构的。 3) 理解架构设计与数据结构设计所需的能力之别,而不至于认为"数据结构是软件的一切"。
设计
软件
结构
数据
架构
数据结构
概念
能力
概要
结构设计
元素
工程
工程师
步骤
算法
开发
不同
相同
之所以
代码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
为知互联网科技有限公司知乎
中山中专网络技术
三级网络技术vip激活码
网络安全周校园日活动
网络技术学院开学需买电脑吗
数据库数据融合技术
网络安全问题自查工作总结
服务器请求失败错误代码6
服务器免费安全防护
余姚敏捷软件开发企业
国际影响力网络安全事件
活字格服务器域名设置
世界网络安全大赛2019
服务器主板电池哪里有卖的
网络安全宣传周银行活动总结
亚马逊代理服务器多少钱
河北网络安全隐患平台
动态网页需要数据库的支持吗
在软件工程中软件开发技术包括
计算机数据库实训总结报告
学软件开发的软件
z97支持哪些服务器cpu
首都360网络安全日期
浪潮软件开发工资2017
副机连不上主机数据库
网络安全模式起什么用
网络安全学院的文凭怎么样
安徽双线服务器
大兴区品牌软件开发价格优惠
广州鲜京网络技术