如何在软件工程中轻松区分子系统和系统组件?
为每个人提供详细的定义..
为了让我更清楚,我们可以考虑系统是StackOverflow站点,它的组件和子系统是什么?
答案 0 :(得分:1)
我在回答这个问题时非常谨慎,因为根据具体情况我们可以有很多定义。
例如,您可以在UML文献中搜索系统和组件的定义,并发现它与操作系统书籍不同。
那说这些是我对组件和子系统的简单定义。我并不是说这是完全正确的。
这只是我发现在投影应用程序时组织事物的一种方式。
我们首先定义“The System”。注意我称之为“The”而不是“a”系统。因为这里的系统是我们的世界。
系统是我们工作的项目。作为软件工程师/架构师/开发人员,您的使命是将其变为现实,维护并使其蓬勃发展。
我对“系统”的定义并不简单,因为不同的项目有不同的上下文。
由于内部文化的原因,即使是不同商店的类似项目也会有不同的语言。
恕我直言的定义依赖于语言,语言依赖于文化,文化也是从语境中演化而来。
但我离题了。简历中,您的定义取决于您的背景。
例如,在DDD中,有必要定义UbiquitousLanguage 确保每个人都在同一页面。
让我们称之为“蓝图”作为用于抽象项目的图表,无论它是否在UML,Bizagi等等。
子系统的通用定义可以是:
从系统的角度来看,它是顶部蓝色打印件上的黑盒子。一般来说,子系统本身都有蓝图,从它的角度看它是系统。
子系统可以独立生存,并且在系统上具有明确的目的和意义。
示例:
他们是厨房,卧室,房子的地下室。
对于SO,你可以说有一个pontuation子系统,负责管理用户如何赚取和丢失积分。
请注意,SE网站的每个实例都可以拥有此类子系统,甚至可以进行通信以跟踪您在许多SE网站中的积分。
其他示例可以是用于持久化和获取相关数据的持久性子系统。
组件的通用定义可以是:
他们很少出现在The System Blue Prints上,很少自己打印蓝图。
通常,组件在系统外没有意义。它们可以被系统和子系统使用,但它的目的是通用的。
在一所房子里,他们是墙壁和家具。在一个偏僻的中间的椅子听起来不对,会议室的椅子有用,但不是子系统。 对于SO,组件可以是用于编写/编辑答案和问题的在线文本编辑器。
值得一提的是第三方组件:
它们本身可以是系统,甚至是非常复杂的系统,如DBMS或jQuery javascript库。
一般来说,在任何蓝图中绘制它们都是错误的。它们可以在世界范围内使用并且是优秀的工具,但它们是具有通用目的的黑盒子。 对于SO,它们可以是SQL DBMS和javascript库
正如我所说,这只是恕我直言。