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

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

我目前的理解是:

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

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


当前回答

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

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

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

其他回答

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.)

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

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

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

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

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

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

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

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

架构是高层次的、抽象的、逻辑的设计,而软件设计是低层次的、详细的、物理的设计。