具有许多导入的节点中的dependency injection

我试图找出哪里dependency injection有它在节点的地方。 即使我知道Java是如何工作的,而且我一直在阅读无数的博客,我似乎无法理解它。

networking上的例子是微不足道的 。 他们并没有真正显示为什么需要DI。 我更喜欢一个复杂的例子。

我看了下面的框架:

https://github.com/young-steveo/bottlejs

http://inversify.io/

现在,Node使用模块模式。 当我做一个导入它接受一个单身人士,因为这是什么节点,它caching模块,除非工厂模式用于返回一个新的实例(返回新的MyThing())。

现在dependency injection的主要function是解耦所有的东西。

当人们说,我得到的目标是…要从模块的顶部删除所有import的概念。

我今天写的是:

'use strict'; // node modules import os from 'os'; ...8 more modules here import fs from 'fs'; // npm modules import express from 'express'; ...8 more modules here import _ from 'lodash'; // local modules import moduleOne from './moduleOne'; ...8 more modules here import moduleTen from './moduleTen'; //...rest of my code 

有30个import是一个改变的痛苦。 在多个文件中具有相同的30是更大的痛苦。

我正在阅读https://blog.risingstack.com/fundamental-node-js-design-patterns/ ,我看着dependency injection区域。 在例1依赖被传递,罚款。 那30几呢? 我不认为这是好的做法?

如何构build这样一个具有这么多依赖的应用程序? 并使unit testing和嘲笑友好?

实现一个Ioc模式作为dependency injection在你的项目中总是一个非常好的select,这使得你可以分离和粒化你的软件,使其更加灵活和不太僵化。 节点js模块patter很难在你的代码中实现抽象,在良好的体系结构中总是需要这样的抽象,而且这样做,使你的代码符合SOLID的D [Dependency Inversion],并且更容易实现SOI。

如果你想看到一个DI的用例,请参阅这个库的自述文件,也是节点Jems DI的一个DI库,它将使模块中的长input列表无效,并且不会让你100%地依赖元数据或迫使你在依赖于DI库的模块中编写额外的代码,或者有时不需要你的业务逻辑,总是在DI库和实例激活之间进行一些抽象。