软件工程中的子系统和系统组件

The subsystem and the components of the system in software engineering

在软件工程中如何轻松区分子系统和系统的组件?

请给出每一个的详细定义..

为了让我更清楚,让我们假设系统是一个 Whosebug 站点,它的组件和子系统是什么?

我之所以谨慎回答这个问题,部分原因是根据上下文我们可以有很多定义。

例如,您可以在 UML 文献中搜索系统和组件的定义,发现它与操作系统书籍不同。

也就是说,这些是我对组件和子系统的粗略定义。我并不是说那是完全正确的。

这只是我在设计应用程序时发现的一种组织方式。

让我们先定义“The System”。请注意,我称其为“The”而不是“a”系统。因为这里系统是我们的背景我们的世界。

系统是我们从事的项目。作为软件工程师/架构师/开发人员,您的使命是实现它、维护它并使其蓬勃发展。

我没有简单的“系统”定义,因为不同的项目有不同的上下文。

即使是在不同商店的类似项目,由于内部文化的不同,语言也略有不同。

恕我直言,定义依赖于语言,语言依赖于文化,文化从上下文中演变而来。

但我离题了。在简历中,您的定义取决于您的上下文。

例如在 DDD 中,有必要定义一个 UbiquitousLanguage 以确保每个人都在同一页面上。

我们称“蓝图”为您用来抽象项目的图表,无论它是否在 UMLBizagi 等格式中。

子系统的通用定义可以是:

从系统的角度来看,它是您的顶级蓝图上的 black-box。一般来说,子系统本身就有蓝图,从它的角度来看,它就是系统。

子系统可以独立存在,并且在系统上有明确的目的和意义。

示例:

它们是厨房、卧室、地下室。

对于 SO 你可以说有一个标点符号子系统,负责管理用户如何获得和失去积分。

注意每个 SE 站点实例都可以有这样的子系统,甚至它们可以通信以跟踪您在许多 SE 站点中的点数。

其他示例可以是用于保存和获取相关数据的持久性子系统。

组件 的通用定义可以是:

他们很少出现在系统蓝图上,也很少自己得到蓝图。

一般来说,一个组件在系统之外是没有意义的。它们可以被系统和子系统使用,但它的用途是通用的。

在房子里,它们是墙壁和家具。偏僻的椅子听起来不对,会议室里的椅子有用但不是子系统。 对于 SO,组件可以是用于 write/edit 答案和问题的在线文本编辑器。

值得一提第三方组件:

它们本身可以是系统,甚至是非常复杂的系统,例如 DBMS 或 jQuery JavaScript图书馆。

一般来说,以任何蓝图绘制它们都是错误的。它们可以在全球范围内使用并且是出色的工具,但它们是具有通用目的的黑匣子。 对于 SO,它们可以是 SQL DBMS 和 JavaScript

总结:

  • 一个子系统可以在没有其 parent 系统的情况下存在。

  • 组件不能单独使用,必须是系统的一部分才能存在。

    打个比方:

  • 汽车是sub-system的出行基础设施。

  • 车轮是汽车的一个组成部分。

正如我所说,这只是恕我直言。