模块与组件设计

ms8*_*s80 29 components module

模块与组件设计有什么区别?

小智 21

我想分享一下我对这种差异的想法.

组件和模块都用于指代一组功能或功能的一部分.模块更合乎逻辑,例如:ERP系统中的模块财务,模块HR,模块制造...... 另一方面,组件更具有物理性.在软件中,它可以是一个DLL,ocx,exe,...

没有标准来衡量哪一个大于另一个.一个组件可以包含模块列表,一个模块也可以包含许多组件.组件用于在技术视图中对系统建模,模块用于在功能视图中对系统进行建模(系统的功能)


小智 10

OSGi中有一个参考文献,我认为它解释了差异非常好.

模块与组件听起来模块和组件有很多共同之处吗?他们都互相提供东西,互相消费.它们也被打包为独立的部署单元.难道这两个不能被认为是同一个或至少是合并的吗?是的,他们可以,但是组件和模块用于不同的目的并且有些正交(它们不是完全正交的,因为组件是由最终可以打包到模块中的代码组成的).模块处理代码打包和代码之间的依赖关系.组件处理实现更高级别的功能和组件之间的依赖关系.组件需要管理它们的代码依赖性,但它们在技术上不需要模块系统来完成它(通常是程序员通过类路径来完成它).一个很好的总结是,您可以将模块视为处理静态代码和编译时依赖关系,而组件则处理实例和执行时依赖关系.


Rob*_*ahl 9

组件和模块经常彼此混淆.然而,它们并不相同,一个的含义并不一定适用于另一个.

模块化是将代码划分为相关功能的模块.在许多编程语言中,模块只是一个源文件.通常的做法是,如果源文件变得太大,您可以将其拆分为两个或多个源文件,并将它们放入新目录中; 虽然目录通常不称为模块,但这种分解仍然是模块化的.

另一方面,组件可以与其他组件以不同的方式组成,以形成不同的程序.也就是说,有一个单独的组合阶段,真实的人决定应该一起使用哪些组件.

我已经看到组件设计被用来强制执行一些硬模块化的概念.由于组合的相当大的开销,因此不能推荐这种方法:组合复杂度随组件数量增加多项式.组件数量随着功能组的数量呈线性增长,因为一旦您通过组件分解开始模块化,您就会强迫自己创建一个新组件,否则只需要一个新模块,因为否则新模块不会真的属于任何地方 在100个组件中,组合开销成为一项全职工作,尽管进行了大量的自动化工作,但每次组合迭代都需要几周时间.这显着阻碍了发展.

我最简单的建议是尽可能远离组件; 众所周知,组件有时可能是必需的.例如,如果项目涉及多个独立组织,则每个组织的一个组件似乎可以接受.

虽然每个人都同意模块化是一件好事,但这是一个品味问题,你对模块的分解应该是多么细致.

如果我知道函数的名称,我的编辑器很快就会找到它.另一方面,如果由于某种原因我不知道函数的名称(或者那个类的类),模块化变得更加重要.

我希望后一种情况只是您可以通过使用该程序体验的功能问题,因此尝试将程序分解为模块反映了将程序行为直观分解为功能区域.


小智 6

如果您的意思是模块化模块,那么IEEE标准软件工程术语表中有一个定义:

"模块化是指系统或计算机程序由离散组件组成的程度,以便对一个组件的更改对其他组件的影响最小."

伯特兰·迈耶博士指出了模块化五个标准:

  • 将问题分解为子问题
  • 模块的可组合性以生成新系统
  • 单独理解模块
  • 连续性 - 微小变化具有局部效应
  • 保护 - 故障隔离

  • 如果您要引用官方来源,最好是正确引用:"系统或计算机程序由分立组件组成的程度,以便对一个组件的更改对其他组件的影响最小" (5认同)

CR *_*son 5

对于数字开发和 UI 考虑(HTML/CSS/JS),我使用这种方法来确保我在做之前保持井井有条和思考。已被证明可以创建更清晰、更有组织的代码,这很好地转化为事半功倍。

在典型的样式表中,我目前设置如下:

/* Style Guide – Mobile First
   1. =Setup
   2. =Modules as independent units made up of components
   3. =Components as group of reusable code containing more than one element
   4. =Classes
   5. =Responsive as enhancement
*/
Run Code Online (Sandbox Code Playgroud)
  • 模块作为由组件组成的独立单元:页眉、页脚、部分、文章、旁白等。一个房子由许多房间组成,所有房间都有特殊的风格和功能,形成一个独立的整体。
  • 组件作为一组包含多个元素的可重用代码:无序列表、引号、卡片、表格等。

我写了一个更完整的解释,你可以在这里阅读。

希望这可以帮助!