模块设计与组件设计的区别是什么?
发布于 2010-12-14 12:54:40
我想分享一下我对这一区别的看法。
组件和模块都用于引用一组函数或函数的一部分。模块更符合逻辑,例如:模块财务,模块HR,模块制造...在ERP系统中。另一方面,组件更具物理属性。在软件中,它可以是dll,ocx,exe,...
没有标准来衡量哪一个比另一个更大。一个组件可以包含模块列表,一个模块也可以包含多个组件。组件用于在技术视图中对系统进行建模,模块用于在功能视图中对系统进行建模(系统的功能)
发布于 2013-03-11 05:21:46
组件和模块经常相互混淆。然而,它们并不相同,其中一个的含义并不一定适用于另一个。
模块化是将代码划分为具有相关功能的模块。在许多编程语言中,模块只是一个源文件。通常的做法是,如果源文件变得太大,可以将其拆分为两个或更多个源文件,并将这些文件放入新目录中;虽然目录通常不称为模块,但这种分解仍然是模块化的。
另一方面,一个组件可以与其他组件以不同的方式组合,以形成不同的程序。也就是说,有一个单独的组合阶段,真正的人决定哪些组件应该一起使用。
我见过组件设计被用来强化一些硬模块化的概念。这种方法不被推荐,因为合成的开销相当大:合成复杂度随着组件数量的增加而呈多项式增长。组件的数量随着功能组的数量线性增长,因为一旦你通过组件分解开始模块化,你就会强迫自己在其他情况下只需要一个新模块的时候创建一个新的组件,因为否则这个新模块就不会真正属于任何地方。在100个组件的情况下,组合开销变成了一项全职工作,尽管进行了大量的自动化工作,但每次组合迭代都需要几个星期的时间。这严重阻碍了开发。
我最简单的建议是,如果可能的话,尽量远离组件;要知道组件有时可能是必需的。例如,如果一个项目涉及多个独立的组织,则每个组织的一个组件似乎是可以接受的。
这是一个品味问题,分解成模块的粒度应该有多细,尽管每个人都认为模块化是一件好事。
如果我知道一个函数的名称,我的编辑器很快就会找到它。另一方面,如果由于某种原因我不知道函数的名称(或类的名称),模块化就变得更加重要。
我希望后一种情况只是一个你可以从使用程序中体验到的功能的问题,所以尝试将你的程序分解到模块中,反映出你的程序行为到功能区域的直观分解。
发布于 2012-05-16 22:46:55
在the «OSGi in Action» book中有一个引用,我相信它很好地解释了这些差异。
模块与组件
听起来模块和组件不是有很多共同之处吗?他们互相提供东西,也从对方那里消费东西。它们也被打包成独立的部署单元。难道这两者不能被认为是相同的,或者至少是组合的吗?是的,它们可以,但组件和模块服务于不同的目的,并且在某种程度上是正交的(它们不是完全正交的,因为组件是由最终可以打包到模块中的代码构成的)。
模块处理代码打包和代码之间的依赖关系。组件处理实现更高级的功能和组件之间的依赖关系。组件需要管理它们的代码依赖项,但从技术上讲,它们不需要模块系统来做到这一点(通常是我们程序员通过类路径做到这一点)。
一个很好的总结是,您可以将模块视为处理静态代码和编译时依赖项,而组件处理实例和执行时依赖项。
-«11.1.1什么是组件?»,«OSGi in Action»(第347页)。
https://stackoverflow.com/questions/2702816
复制相似问题