javascript模块化和依赖注入之间的区别

时间:2016-04-21 12:55:51

标签: javascript dependency-injection theory modularization

javascript代码的模块化(通过示例使用browserify)和依赖注入有什么区别?

他们是同义词吗?这两个人在一起吗?或者我错过了一些观点?

2 个答案:

答案 0 :(得分:1)

您可以参考此article

  

模块是实现某些功能的代码片段   是使用特定技术编写的。没有开箱即用   JavaScript语言中的模块化方案。即将到来   ECMAScript 6规范倾向于通过引入来解决这个问题   JavaScript语言本身的模块概念。这是未来。

Dependency injection in JavaScript

  

目标

     

我们说我们有两个模块。第一个是服务   发出Ajax请求,第二个是路由器。

var service = function() {
    return { name: 'Service' };
}
var router = function() {
    return { name: 'Router' };
}
     

我们还有另一个需要这些模块的功能。

var doSomething = function(other) {
    var s = service();
    var r = router();
};
     

并使功能更有趣   需要再接受一个参数。当然,我们可以使用上面的代码,   但那并不是很灵活。如果我们想使用ServiceXML或   ServiceJSON。或者如果我们想要模拟一些模块怎么办?   测试目的。我们不能只编辑函数体。该   我们都提出的第一件事就是将依赖关系传递给   函数的参数。即:

var doSomething = function(service, router, other) {
    var s = service();
    var r = router();
};
     

通过这样做,我们传递了模块的确切实现   我们想要的。然而,这带来了一个新问题。想象一下,如果我们有   在我们的代码中做一些事情。如果我们需要第三个,会发生什么   依赖。我们无法修改所有功能的来电。所以,我们需要一个   仪器将为我们做到这一点。那是什么依赖注射器   正在努力解决。让我们写下我们想要的几个目标   实现:

     
      
  • 我们应该能够注册依赖项
  •   
  • 注入器应该接受一个函数,并且应该返回一个以某种方式获得所需资源的函数
  •   
  • 我们不应该写很多,我们需要简短的语法
  •   
  • 注入器应保持传递函数的范围
  •   
  • 传递的函数应该能够接受自定义参数,而不仅仅是描述的依赖项
  •   
     

一个好的清单不是。让我们潜入。

答案 1 :(得分:1)

模块化是指将代码分解为单独的,独立的"包" 依赖注入是指不对其他模块的引用进行硬编码。

作为一个实际示例,您可以编写不使用依赖注入的模块:

import { Foo } from 'foo';

export function Bar() {
    return Foo.baz();
}

此处有两个模块,但此模块会导入特定的其他硬编码模块。

使用依赖注入编写的相同模块:

export function Bar(foo) {
    return foo.baz();
}

然后其他人可以将其用作:

import { Foo } from 'foo';
import { Bar } from 'bar';

Bar(Foo());

在呼叫时注入Foo依赖,而不是对依赖项进行硬编码。