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

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

我目前的理解是:

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

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


当前回答

就我个人而言,我喜欢这个:

“设计师关心的是当一个用户按下一个按钮时会发生什么,而架构师关心的是当一万个用户按下一个按钮时会发生什么。”

由Mark Cade和Humphrey Sheil编写的Java™EE学习指南

其他回答

以下是可能更详细地解释体系结构的参考资料和软件体系结构的UML图列表。(我找不到用于软件设计的UML图列表)

Grady Booch

在架构模型中使用UML 2图

UML图的分类

UML图的分类

即使在发布了这个答案之后,我自己也不清楚哪个图是用于架构的,哪个图是用于设计的:)。Grady Booch在他的第58张幻灯片中指出,类、接口和协作是设计视图的一部分,而这个设计视图是架构视图的一部分!!

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

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

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

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

查看这个链接。

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

体系结构是指计算机或基于计算机的系统的概念结构和逻辑组织。 设计是指在一个系统或物体被制造出来之前,为显示其外观、功能或工作方式而设计的计划或图纸。 如果您正在“架构”一个组件,那么您正在定义它在更大的系统中的行为。 如果你在“设计”同一个组件,你就是在定义它的内部行为。

所有的建筑都是设计,但并非所有的设计都是建筑。

什么部分是设计,如何具体实现,以及什么和如何是架构的交集。

区分建筑和设计的形象:

还有一些设计决策,在架构上并不重要,也就是说不属于设计的架构分支。例如,某些组件的内部设计决策,如算法的选择,数据结构的选择等。

任何在组件边界之外不可见的设计决策都是组件的内部设计,并且是非架构性的。这些是系统架构师留给模块设计人员或实现团队的设计决策,只要他们的设计不打破系统级架构施加的架构限制。

这个链接提供了一个很好的类比

我像Patrick Karcher一样看待建筑——从大局出发。例如,您可以为建筑物提供架构,查看其结构支撑、窗户、入口和出口、排水等。但你并没有“设计”楼层布局、隔间位置等。

所以当你设计了大楼的时候,你并没有设计每个办公室的布局。 我认为这同样适用于软件。

你可以把设计布局看作是“设计布局”……

用我自己的话来说,你是对的;

体系结构是将系统需求分配给系统元素。关于架构的四个陈述:

它可以引入非功能性需求,如语言或模式。 它定义了组件、接口、时序等之间的交互。 它不应该引入新的功能, 它将系统要执行的(设计的)功能分配给元素。

当对系统的复杂性进行细分时,体系结构是必不可少的工程步骤。

例如:想想你的房子,你的厨房不需要建筑师(只涉及一个元素),但整个建筑需要一些交互定义,比如门和屋顶。

设计是对功能(提议的)实现的一种信息表示。它旨在获得反馈,并与利益相关者进行讨论。这可能是一个很好的实践,但不是一个必要的工程步骤。

在厨房安装之前,最好能看到厨房的设计,但对于烹饪要求来说不是必需的:

如果我想一下,你可以这样说:

架构是为公众/工程师在更详细的抽象层次上设计的 设计是在一个不太详细的抽象层次上面向公众的