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

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

我目前的理解是:

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

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


当前回答

架构:架构在建筑的各个阶段创建规划布局 按规格。

设计人员:-设计人员的工作是满足建筑设计的所有基本要求,包括布局的功能、美学和外观。

其他回答

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

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

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

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

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

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

当您需要将较高体系结构级别识别的业务和功能投射到应用程序中时,软件体系结构最好用于系统级。

例如,你的业务是关于交易员的“盈亏”,你的主要功能涉及“投资组合评估”和“风险计算”。

但是当软件架构师详细描述他的解决方案时,他会意识到:

“投资组合评估”不能只是一个应用程序。它需要在可管理的项目中进行细化,例如:

GUI 发射器 调度程序 ...

(因为涉及的操作太大了,需要在几台计算机之间进行拆分,同时仍然可以通过一个通用的GUI随时监控)

软件设计将检查不同的应用程序,它们的技术关系和内部子组件。 它将产生最后一个体系结构层(“技术体系结构”)工作所需的规范(根据技术框架或横向组件),以及项目团队(更面向业务功能的实现)开始各自的项目所需的规范。

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

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

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

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

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

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

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)