zoukankan      html  css  js  c++  java
  • [架构设计] 组件和模块的区别

    组件:主要接口从父类继承而来,由系统基础框架调用,开放给外部调用的接口比较少;符合开闭原则和依赖倒置原则;通过基础架构的回调实现其复用和功能。

    模块:独立的服务接口,为无继承耦合的其它模块提供服务,功能或职责比较独立,除对外提供服务外与其他模块耦合比较少。

    http://blog.csdn.net/horkychen/article/details/45083467

    组件(Component)和模块(Module)又是一对容易混淆的名词,也常常被用来相互替换。两者是否有差异往往取决专业背景、所在领域、以及视角。个人总结,从设计上来看,组件强调复用,模块强调职责(内聚、分离),或者说组件是达到可复用要求的模块。
    Module, 中文为模块或模组。它的核心意义是分离职责,属于代码级模块化的产出。本身是一组具有一定内聚性代码的组合,职责明确。对外的接口可以是松散的,也可以是集中的。SEI的定义如下:
      An implementation unit of software that provides a coherent set of responsibilities.
    它以问题分解的形式,来解决软件设计问题。它更强调一个内聚的概念,形式上可以是Java中的包,也可以是一个源代码目录。
     
    Component,中文称为组件,或者构件。使用非常比较广泛,它的核心意义在于复用,相对模块,对于依赖性有更高的要求。
    我大概整理了一下,两个定义 (参考Component based software programming):
    • 可以复用的模块,概念上与模块基本等同,只是明显有依赖性的要求。(最早提出时概念)。
    • Component-Based Software Development中提倡的组件定义如下(Component Software):

    除了完成某个特定功能外,还要具备如下条件的代码组合:

        • 符合特定的接口要求(交互的要求)。
        • 具有明确的上下文依赖 (复用的要求)。
    它可以独立发布(二进制或源代码的形式),也可以进行组合。这样软件开发就变成了组件的组装了。
     
             和OOP中的Objects相比,一个类也可以视为一个组件,但更多的情况下,组件提供了更为高层的系统视角。Component如同一片树林,Object只是树。

             Eclipse中的Plugin和COM(Component Object Model)就是Component Software的典型代表。
     
     
    两者的关系取决于软件本身和视角。Eclipse框架下的一个插件可能包含若干个模块,因为从Eclipse的角度来看,每个Plugin是用来复用的。
    而一个应用的模块(如GUI)下也可能使用了多个组件,因为复用的是每个控件。
     
    另外也有人从发布形式上来区分,其实也不尽然。一个模组可能以静态库、动态库存在(skia被应用到一个应用中的场景),一个组件也可能以源码的形式存在(Chromium中的Browser Component)。发布形式其实是取决于产品需求的,不可能准确的区分出两个设计上的概念。
     
    欢迎一起讨论!
     
    参考:
     
    转载请注明出处: http://blog.csdn.net/horkychen
  • 相关阅读:
    简单bb两句
    P2894 [USACO08FEB]Hotel G
    文艺平衡树
    CS184.1X 计算机图形学导论作业1
    C++ Primer Plus章节编程练习(第五章)
    C++ Primer Plus章节编程练习(第六章)
    CS184.1X 计算机图形学导论作业0
    C++ Primer Plus章节编程练习(第四章)
    计算机图形学之光栅图形学算法
    Codeforces 980B
  • 原文地址:https://www.cnblogs.com/feng9exe/p/5620960.html
Copyright © 2011-2022 走看看