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

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

我目前的理解是:

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

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


当前回答

Cliff Notes版本:

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

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

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

其他回答

我认为当我们讨论设计与架构时,我们应该使用下面的规则来确定:如果您创建的软件图的元素可以一一映射到编程语言的语法结构,那么就是设计,如果不是架构。

So, for example, if you are seeing a class diagram or a sequence diagram, you are able to map a class and their relationships to an Object Oriented Programming language using the Class syntactical construction. This is clearly Design. In addition, this might bring to the table that this discussion has a relation with the programming language you will use to implement a software system. If you use Java, the previous example applies, as Java is an Object Oriented Programming Language. If you come up with a diagram that shows packages and its dependencies, that is Design too. You can map the element (a package in this case) to a Java syntactical construction.

Now, suppose your Java application is divided in modules, and each module is a set of packages (represented as a jar file deployment unit), and you are presented with a diagram containing modules and its dependencies, then, that is Architecture. There isn’t a way in Java (at least not until Java 7) to map a module (a set of packages) to a syntactical construction. You might also notice that this diagram represents a step higher in the level of abstraction of your software model. Any diagram above (coarse grained than) a package diagram, represents an Architectural view when developing in the Java programming language. On the other hand, if you are developing in Modula-2, then, a module diagram represents a Design.

(摘自http://www.copypasteisforword.com/notes/software-architecture-vs-software-design)

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

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

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

程序或计算系统的软件体系结构是系统的结构,由软件组件、这些组件的外部可见属性以及它们之间的关系组成。

(来自维基百科,http://en.wikipedia.org/wiki/Software_architecture)

软件设计是解决问题和规划软件解决方案的过程。在软件的目的和规格确定之后,软件开发人员将设计或雇用设计人员为解决方案制定计划。它包括低级组件和算法实现问题以及体系结构视图。

(来自维基百科,http://en.wikipedia.org/wiki/Software_design)

我自己也说不出更好的话了:)

当我寻找建筑和设计之间的简单区别时,我发现了这一点; 你对这种看待他们的方式有什么看法?

架构是我们正在建造的“什么”; 设计是我们“如何”建造;

如果有人建造了一艘船,那么发动机、船体、电路等将是他的“建筑元素”。对他来说,发动机制造将是“设计工作”。

如果他将引擎的构建委托给另一个团队,他们将创建一个“引擎架构”……

这取决于抽象和细节的程度。一个人的建筑可能是另一个人的设计!