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

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

我目前的理解是:

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

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


当前回答

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

其他回答

体系结构是用于构建系统的设计模式的最终集合。

我猜设计是用来把所有这些放在一起的创造力?

我的提醒:

我们可以不征求别人的意见就改变设计 如果我们改变架构,我们需要将其传达给某人(团队、客户、涉众……)

体系结构更像是集成系统的各种功能,以实现系统的一个整体目标,而设计则解决每个功能需求。

例如,以MVVM为例,这是一种体系结构模式。对于通知功能,MVVM使用观察者模式,这又是一种设计模式,

架构: 结构设计是在更高的抽象层次上进行的工作,它将技术上重要的需求实现到系统中。该体系结构为进一步的设计奠定了基础。

设计: 通过在每个抽象层的迭代过程来填充架构所没有的内容的艺术。

建筑就是设计,但并非所有的设计都是建筑。因此,严格地说,尝试区分架构设计和非架构设计会更有意义。有什么区别呢?视情况而定!每个软件架构师可能有不同的答案(ymmv!)我们开发我们的启发式来提出一个答案,例如“类图是架构,序列图是设计”。有关更多信息,请参阅DSA书籍。

人们常说,架构比设计处于更高的抽象级别,或者架构是逻辑的,而设计是物理的。但这种观念虽然被普遍接受,但在实践中却毫无用处。在高抽象和低抽象之间,逻辑和物理之间,你的界线在哪里?视情况而定!

所以,我的建议是:

create a single design document. name this design document the way you want or, better, the way the readers are more accustomed to. Examples: "Software Architecture", "Software Design Specification". break this document into views and keep in mind you can create a view as a refinement of another view. make the views in the document navigable by adding cross-references or hyperlinks then you'll have higher level views showing broad but shallow overview of the design, and closer-to-implementation views showing narrow but deeper design details. you may want to take a look at an example of multi-view architecture document (here).

说了这么多……我们需要问的一个更相关的问题是:多少设计才足够?也就是说,我什么时候应该停止描述设计(用图表或散文),而应该转向编码?