【问题标题】:Module vs. component design [closed]模块与组件设计[关闭]
【发布时间】:2011-02-11 18:26:09
【问题描述】:

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

【问题讨论】:

  • 这取决于您所谈论的语言/环境(例如,.Net 模块与 perl 模块完全不同)。你对哪个感兴趣?
  • 我能想到的唯一对这个问题有意义的上下文是 Joomla!,但在我们得到一些澄清之前,我不会费心回答。
  • 在框架方面。你能给我举个PHP框架的例子吗?是模块还是组件?
  • 我也在为这种分离而苦苦挣扎。我在综合/分析方面考虑它。组件被放在一起(综合)来构建软件。模块是划分(分析)代码的结果。所以组件是关于软件的高级设计,而模块更多的是关于代码级别的组织。

标签: module components


【解决方案1】:

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

组件和模块都用于指代一组功能或功能的一部分。模块更符合逻辑,例如:ERP系统中的模块Finance、模块HR、模块Manufacturing...。另一方面,组件更物理。在软件中可以是dll、ocx、exe、...

没有标准来衡量哪个比另一个更大。一个组件可以包含模块列表,一个模块也可以包含多个组件。组件用于技术视图的系统建模,模块用于功能视图的系统建模(系统的功能)

【讨论】:

  • 这绝对是一个错误的答案。引用support.microsoft.com/en-us/kb/815065:“DLL 的使用有助于促进代码的模块化、代码重用,[...]” - 你不能说“组件更物理”,DLL 都是关于模块化的,你不能得到比这更多的物理.
  • 对于 OSGI 包也是如此 osgi.org/developer/architecture:“因此,模块化是 OSGi 规范的核心,并体现在包的概念中。在 Java 术语中,包是一个普通的旧 JAR 文件”——同样是模块是物理的。
  • 我同意@Tin,“物理”一词的使用可能有争议,但总的来说,Tin 的答案要清楚得多。
【解决方案2】:

组件和模块经常相互混淆。他们 然而,它们是不一样的,并且一个的含义并不相同 必须为对方持有。

模块化是将代码划分为相关的模块 功能。在许多编程语言中,模块只是一个 源文件。通常的做法是,如果源文件也增长了 大,你可以把它分成两个或多个源文件,把这些 进入新目录;虽然目录通常不称为模块, 这种分解仍然是模块化的。

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

我已经看到组件设计被用来强制执行一些硬概念 模块化。不推荐这种方法,因为 组合的显着开销:组合复杂性增加 具有分量数的多项式。并且数量 组件随着功能组的数量线性增长, 因为一旦您开始按组件进行模块化 分解,你强迫自己在任何时候创建一个新组件 否则你只需要一个新模块,因为那个新模块 否则将不属于任何地方。在 100 个组件中, 作文开销变成了全职工作,每个作文 迭代最多需要几周时间,尽管有很多 自动化努力。这严重阻碍了发展。

我最简单的建议是尽量远离组件 可能的;知道组件有时可能是必需品。 例如,如果多个独立组织参与一个 项目,每个组织的一个组件似乎是可以接受的。

这是一个品味问题,你的分解有多细 模块应该是,尽管每个人都同意模块化是好的 事物。

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

我希望后一种情况只会成为功能的问题 您可以通过使用该程序来体验,因此请尝试制作 将您的程序分解成模块反映了一个直观的 将程序的行为分解为 功能。

【讨论】:

    【解决方案3】:

    the «OSGi in Action» book 中有一个参考,我相信它很好地解释了这些差异。

    模块与组件

    听起来模块和组件不是有很多共同点吗?他们既互相提供东西,又互相消耗东西。它们也被打包为独立的部署单元。难道这两者不能被认为是一体的,或者至少可以结合起来吗?是的,它们可以,但是组件和模块的用途不同,并且在某种程度上是正交的(它们不是完全正交的,因为组件是由最终可以打包成模块的代码组成的)。

    模块处理代码打包和代码之间的依赖关系。组件处理实现更高级别的功能和组件之间的依赖关系。组件需要管理它们的代码依赖关系,但从技术上讲,它们不需要模块系统来完成(通常是我们程序员通过类路径来完成)。

    一个很好的总结是,您可以将模块视为处理静态代码和编译时依赖项,而组件处理实例和执行时依赖项。

    — «11.1.1 什么是组件?»,«OSGi in Action»(第 347 页)。

    【讨论】:

    • 同意;我只是想加强这种观点。理解模块和组件之间区别的关键在于我们如何看待系统:一个静态视图,其中模块和它们之间的依赖关系直接来自代码,以及一个实例视图,其中组件和它们之间的依赖关系/链接是运行时处理和/或单独的执行前配置步骤的结果。
    • 我同意你@arpadf
    【解决方案4】:

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

    “模块化是系统或计算机程序由离散组件组成的程度,使得对一个组件的更改对其他组件的影响最小。”

    Dr. Bertrand Meyer 提出了模块化的五个标准:

    • 问题可分解为子问题
    • 模块的可组合性以产生新系统
    • 独立模块的可理解性
    • 连续性 - 微小的变化会产生局部影响
    • 保护 - 故障隔离

    【讨论】:

    • 如果您要引用官方来源,最好正确引用:The degree to which a system or computer program is composed of discrete components such that a change to one component has minimal impact on other components
    【解决方案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
    */
    
    • 作为独立单元的模块由组件组成:页眉、页脚、部分、文章、旁注等。一个房子由许多房间组成,所有房间都有特殊的风格和功能,以形成一个独立的整体。
    • 组件作为一组包含多个元素的可重用代码:无序列表、引号、卡片、表格等。

    我写了一个更完整的解释你可以阅读here

    希望这会有所帮助!

    【讨论】:

      【解决方案6】:

      组件是一个运行时实体(可以由模块组成),独立的可运行单元

      Module 是一个被划分为执行单元、独立任务分配的系统。模块可能是也可能不是组件

      【讨论】:

        【解决方案7】:

        在我看来,ModuleComponent 都只是几个功能和资产。

        而他们之间的区别是:

        组件有业务逻辑而模块没有。

        例如,这个文本输入区只是一个Module,但是当有一些post api调用时,它就变成了一个Component。您可以将模块放在任何地方,它会正常工作,但 Componet 只能在特定页面或视图中使用(因为它有特定的 api 调用)

        【讨论】:

        • 我喜欢组件包含业务逻辑而模块不包含的断言
        • 我也是@ESR,这很重要。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-07-24
        • 2011-08-27
        • 1970-01-01
        • 1970-01-01
        • 2020-10-06
        • 2019-12-30
        • 1970-01-01
        相关资源
        最近更新 更多