有人能解释一下软件设计和软件架构的区别吗?

更具体地说;如果你让别人给你展示“设计”——你希望他们展示什么?“建筑”也是如此。

我目前的理解是:

设计:系统特定模块/部分的UML图/流程图/简单线框(用于UI) 架构:组件图(显示系统的不同模块如何相互通信以及如何与其他系统通信),要使用什么语言,模式……?

如果我说错了,请指正。我提到了维基百科在http://en.wikipedia.org/wiki/Software_design和http://en.wikipedia.org/wiki/Software_architecture上有文章,但我不确定我是否理解正确。


当前回答

建筑与设计密切相关;它们之间的主要区别在于我们面对的方向。 建筑面向战略、结构和目的,面向抽象。 设计面向实现与实践,面向具体。

其他回答

软件设计有更长的历史,而软件架构这个术语只有20年的历史。因此,它正在经历成长的烦恼。

学术界倾向于将架构视为更大的软件设计领域的一部分。尽管越来越多的人认识到Arch是一个独立的领域。

实践者倾向于将Arch视为高级设计决策,具有战略性,并且在项目中撤销可能代价高昂。

Arch和设计之间的确切界限取决于软件领域。例如,在Web应用领域,分层架构是目前最受欢迎的(业务逻辑层,数据访问层等)。Arch的低层部分被认为是设计(类图,方法签名等)。在嵌入式系统,操作系统,编译器等领域,这将是不同的定义。

体系结构是用于构建系统的设计模式的最终集合。

我猜设计是用来把所有这些放在一起的创造力?

是的,对我来说听起来不错。设计是你要做的事情,而架构是将设计的各个部分连接在一起的方式。它可以是语言不可知的,但通常会指定要使用的技术,例如LAMP vs Windows, Web服务vs RPC。

我认为架构是关于人类和/或系统的接口。例如,web服务契约(包括协议等)就是体系结构。一个屏幕是如何组成的,不是颜色之类的,而是有什么领域,这就是架构。

设计就是如何建造某样东西。什么框架、语言、技术等等。当然,这必须与考虑平台、安全性等的企业指导方针和限制相一致。

Cliff Notes版本:

设计:根据所需产品的规格实现解决方案。

架构:支持设计的基础/工具/基础设施/组件。

这是一个相当宽泛的问题,会引起很多人的回应。