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

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

我目前的理解是:

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

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


当前回答

非常主观,但我的观点是:

体系结构 系统的总体设计,包括与其他系统的交互、硬件要求、整体组件设计和数据流。

设计 整个系统中一个组件的组织和流程。这还包括该组件用于与其他组件交互的API。

其他回答

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

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

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

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

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

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

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

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

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

你说得对,是的。系统的架构是它的“骨架”。它是系统抽象的最高层次。有什么样的数据存储,模块之间如何交互,有什么样的恢复系统。就像设计模式一样,也有架构模式:MVC、3层分层设计等。

软件设计就是设计各个模块/组件。模块x的职责和功能是什么?Y类?它能做什么,不能做什么?可以使用哪些设计模式?

所以简而言之,软件架构更多的是整个系统的设计,而软件设计则强调模块/组件/类的层面。

设计:了解模块,模块之间的关系,每个模块的功能,类及其成员函数,每个模块之间通信的接口。

体系结构:体系结构是软件系统的整个结构。所有模块、类和组件执行不同的任务,并将给出唯一的结果。

例如:有一个有5个房间的房子。还有附属浴室。厨房也在家里。所以家里有不同的东西这些东西之间有不同的关系。所以这一切都是关于一个家的“设计”。

而当你从房子外面看的时候,你看到的整个结构都是关于建筑的。

体系结构确定了系统的基本组件,描述了它们的组织,以及它们与创建系统框架的关系。

设计描述了各种组件,以及应该如何在系统架构提供的框架中开发它们以提供所需的功能。

Good question... Although the line between them is hardly a bright sharp line, imho, if you are using both terms, then Architecture encompasses more technical or structural decisions about how to build or construct something, especially those decisions that will be hard (or harder) to change once implemeneted, whereas Design encompasses those decisions that either are easy to change later (like method names, class <-> file organizational structure, design patterns, whether to use a singleton or a static class to solve some specific problem, etc. ) and/or those that effect the appearance or esthetic aspects of a system or application (Human Interface, ease of use, look and feel, etc.)