首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CommonJ和AMD都是依赖注入吗?

CommonJ和AMD都是依赖注入吗?
EN

Stack Overflow用户
提问于 2013-12-26 14:47:04
回答 2查看 944关注 0票数 4

我只是触及了dependency injection的概念,

然后我认为CommonJ和AMD是一种dependency injection

因为在任何标准下定义模块时,都必须先加载它的依赖模块。

您定义的模块应该只公开抽象的API,而不太可能公开细节。

我说的对吗?我错过了什么吗?

EN

回答 2

Stack Overflow用户

发布于 2013-12-27 12:55:15

它可以作为这样的一些工作,但不是真的。

依赖注入通常与编译后的代码有关。在大多数情况下,更改引用的二进制文件需要重新编译和重新部署。依赖注入允许的是通过文本文件选择在运行时使用的二进制文件,从而消除了重新编译产品的需要。

使用amd通过像所需这样的库,您通常看到的模式是通过约定直接引用,这感觉很像项目引用

对于jquery-dependent项目,您确实可以看到通过配置进行的库交换。在这种情况下,通过更改代码更新指向引用的路径。虽然这与依赖注入类似,但它是一个代码更改。例如,以下内容在现代化中定义了所需的路径

代码语言:javascript
复制
require.config({
    paths: {
        modernizr: '//cdnjs.cloudflare.com/ajax/libs/modernizr/2.7.1/modernizr.min'
    }
});

要更改依赖项,开发人员需要更改代码,而不是配置

票数 1
EN

Stack Overflow用户

发布于 2016-02-12 07:27:08

你可以这样想:

AMD对JavaScript是什么:

  • #include是C的
  • import是Java的
  • require是NodeJS

的确,它可以用于注入依赖项,但是当考虑到DI机制时--而不仅仅是模块加载器--它鼓励将每个模块编写为Singleton。

示例:

代码语言:javascript
复制
define('a', function () {
  return {
    doX: function () { ... }
  };
});

define('b', ['a'],  function (a) {
  return {
    doY: function () { 
      a.doX(); 
    }
  };
});

你可以说你在把a注入到b中,但是因为只有一个a的拷贝--一个单例--这个a知道它会在每次模块使用它作为依赖项时都使用相同的。

如果你这样做了:

代码语言:javascript
复制
define('A', function () {
  function A(options) {  // some constructor/factory method
     return {
       doX: function () {...}
     }
  }

  return A;
});

define('b', ['A'],  function (A) {

    if (<some condition>) {
      var customOptions = {<some options>}
      var a1 = new A(customOptions);

      return {
         doY: function () {
            a1.doX();
         }
      };
    }

    var defaultOptions = {<default>}
    var a2 = new A(defaultOptions);
    return {
      doY: function () {
         a2.doY();
      }
    }
});

在第二个示例中,您可以创建模块A的多个实例,因为它返回构造函数/工厂方法,而不是实例。

为了方便测试,避免单例通常是个好主意,因为这意味着您实际上可以注入不同的实例,甚至存根。如果您要注入的模块是Singleton,则这几乎是不可能的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20786721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档