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

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

我目前的理解是:

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

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


当前回答

建筑是战略的,而设计是战术的。

架构包括框架、工具、编程范例、基于组件的软件工程标准和高级原则。

而设计是一种与局部约束有关的活动,例如设计模式、编程习惯用语和重构。

其他回答

架构设计的基本原理来自于各种因素,其中最重要的是非功能性需求,比如可伸缩性,当然最重要的是经验。没有了理论基础,你就只剩下平淡的模式,或者怎么做。无论是在更高的层次上还是在类的层次上,它仍然是设计。

或者换句话说

架构是元设计,即设计设计。您有一些已知的模式适合某个解决方案空间,您会选择哪个,为什么?架构是当你回答“是哪个”和“为什么”时(“如何”已经在设计中给出了)。它当然不依赖于抽象级别,例如实现分布式会话不是一个类级别的任务,但是对于给定的体系结构有一些设计可供选择。

同样,体系结构也反映在类级设计中。在可伸缩的体系结构下,如果不考虑可伸缩性因素,类设计通常是不同的。为什么你必须有一个方法“BeginAsyncUpload”而不是“Upload”是一个架构决策。

有趣的是,当我们将注意力转移到更高层次的系统元素时,“哪个和为什么”问题变得更加重要,而“如何”变得不那么相关。从另一个方向来看,“如何”部分变得更加重要,这也是因为重复使用使得它变得很明显,例如,在抽象工厂和原型之间进行选择。

软件架构“关注的问题是……超出了计算的算法和数据结构。

架构特别不是关于实现的细节(例如,算法和数据结构)。体系结构设计包含了比OOD(面向对象设计)通常提供的更丰富的抽象集合。

设计涉及到设计元素的模块化和详细接口,它们的算法和过程,以及支持体系结构和满足需求所需的数据类型。

“建筑”经常被用作“设计”的同义词(有时前面带有形容词“高级”)。许多人使用术语“架构模式”作为“设计模式”的同义词。

查看这个链接。

定义术语体系结构、设计和实现

正如其他人指出的那样,规划软件的架构实际上是做出对软件开发或执行生命周期有整体影响的主要设计决策;所以简单地说,建筑只是高层次的设计。

即使架构决策不影响所有组件(因此是局部的),它仍然必须是全局相关的,即它以某种方式影响整个系统;否则只是一个本地设计决策。

不过,我想指出的是,与架构相关的一个更相关的问题可能是Hennessy & Patterson在《计算机架构》中定义的架构vs组织。基于此,我们可以将体系结构视为系统的数据模型(输入/输出,状态)抽象,而将组织视为实现(软件开发)过程中所采取的典型设计决策。

架构: 结构设计是在更高的抽象层次上进行的工作,它将技术上重要的需求实现到系统中。该体系结构为进一步的设计奠定了基础。

设计: 通过在每个抽象层的迭代过程来填充架构所没有的内容的艺术。

建筑是战略的,而设计是战术的。

架构包括框架、工具、编程范例、基于组件的软件工程标准和高级原则。

而设计是一种与局部约束有关的活动,例如设计模式、编程习惯用语和重构。