Architecture 软件结构与软件体系结构

Architecture 软件结构与软件体系结构,architecture,uml,modeling,Architecture,Uml,Modeling,我无法得到软件结构和软件架构之间的精确区别 请举一个简单的例子来解释精确的差异 顺便说一句,我使用UML表示体系结构软件体系结构和它们之间的软件结构重叠 软件体系结构是与软件系统(简单地说)相关的一组重要方面和决策。它包括最重要的需求和所有类型的限制(性能、安全性等),然后是高级系统组织、系统部件之间的主要通信机制、外部依赖性、实现技术和指南,甚至风险等 我曾经读过一篇关于软件架构的伟大论述:它是一组难以改变的决策 所以,当你不确定某个方面/决策是否真的与架构相关时,问问你自己——如果我以后改变

我无法得到软件结构和软件架构之间的精确区别

请举一个简单的例子来解释精确的差异


顺便说一句,我使用UML表示体系结构

软件体系结构和它们之间的软件结构重叠

软件体系结构是与软件系统(简单地说)相关的一组重要方面和决策。它包括最重要的需求和所有类型的限制(性能、安全性等),然后是高级系统组织、系统部件之间的主要通信机制、外部依赖性、实现技术和指南,甚至风险等

我曾经读过一篇关于软件架构的伟大论述:它是一组难以改变的决策

所以,当你不确定某个方面/决策是否真的与架构相关时,问问你自己——如果我以后改变了这个方面/决策,会产生什么影响?改变它有多难

示例:

  • 假设我们希望将客户机-服务器系统结构更改为3层。重组有多难?嗯,可能很难。因此,这是一个建筑方面
  • 我们想要改变XML和JSON之间的通信。这可能是非常复杂的,如果没有良好的设计,所以我们谨慎对待这一点,并作为一个建筑学的要求
  • 如果我们想更改方法中的排序算法,该怎么办。这种变化可能是本地化的,成本也不是很高。因此,这不是一个建筑方面
  • API od定义的变化是一个系统的一些核心模块,被许多其他模块和系统使用,这很可能是一个架构主题
另一方面,软件结构实际上是一种系统设计,可以是非常高级的(如显示主要模块或层的框图),直到非常详细(代码蓝图)

这种软件结构的高级视图肯定是软件架构的一部分,而详细设计不是(可能是一些重要的部分)

更新(评论后)

1#关于强烈建议软件使用哪个图表的任何提示 架构和软件结构?因为这听起来像是一门课 在这两种情况下(架构和结构)都应使用图表

重要的不是要制作哪个UML图,而是要显示什么是重要的,哪个方面

因此,所有的图表都可以用来描述一个建筑方面。 然而,最常见且可能是必需的图是组件图。它自然地展示了系统模块的高级设计以及它们之间的接口方式。它可以通过部署视图进行扩展。 类图通过表示或多或少详细的类结构和关系来显示组件的内部结构。并不是所有的类图都与体系结构相关,但有些类图确实如此(“问问你自己……”)

还有很多其他潜在的重要方面,比如系统行为。您可以使用UML序列、状态机、活动等。其中一些构建了体系结构,另一些不太重要,但也有助于展示

2#我从回答中了解到,详细设计不是一部分 建筑/结构设计,但我可以使用相同类型的 UML图,如类图和序列图(用于 架构(architecture)和结构(structure),并提供更详细的信息。对吧?

如上所述,这与图表本身的类型无关,而是与显示的内容有关。所以,如果你认为内容是相关的,你把它放在架构下。如果不是,则视为详细设计

示例:可以显示一个序列,以显示与外部设备的关键实时通信。虽然它可以是非常低级的,但它可以是满足重要需求的基础。 同一类型的图可用于显示本地算法或用例场景,这些场景并不重要,因此不是架构的一部分

3#高层设计是否与建筑设计相同

你可以这么说。
请记住,建筑与非建筑之间没有明确的界限。有时这是主观的,关键不是要正确区分它们,而是要建立一个良好的规范,这将导致成功的产品开发。

这不应该在上询问吗?谢谢您的帮助hint@TobiMcNamobi请注意我编辑了我的问题我真的很感谢你“问问你自己”伟大的例子1#对于软件架构和软件结构,有没有关于强烈推荐哪个图的提示?因为听起来类图应该在这两种情况下使用(架构和结构)2#我从回答中了解到,详细设计不是架构/结构设计的一部分,但我可以使用相同类型的UML图,如类和序列图(在架构和结构中使用)以及更详细的信息。对吗?请澄清这些要点3#高层设计是否与建筑设计相同?请参阅更新的答案。你帮助的比你想象的要多did@Aleks,谢谢你很酷,很高兴知道。谢谢