第68号羊群编号播客中的某人,http://herdingcode.com/herding-code-68-new-year-shenanigans/,声称IOC容器没有Python或Javascript的地方,或者说是这样的话.我认为这是传统智慧,它适用于所有动态语言.为什么?动态语言是什么让IOC容器变得不必要?
我是来自.NET世界的NodeJs开发的新手,我正在网上搜索有关在Javascript中对DI / DIP进行降级的最佳实践。
在.NET中,我会在构造函数中声明我的依赖关系,而在javascript中,我看到一个常见的模式是通过require语句在模块级别声明依赖关系。
对我来说,当我使用require时,我会耦合到特定文件,同时使用构造函数来接收我的依赖项更加灵活。
您会建议采用javascript的最佳做法吗?(我正在寻找架构模式,而不是IOC技术解决方案)
搜索网络时,我遇到了此博客文章(评论中有一些非常有趣的讨论):https : //blog.risingstack.com/dependency-injection-in-node-js/
它使我的冲突非常好。这是博客文章中的一些代码,可让您了解我在说什么:
// team.js
var User = require('./user');
function getTeam(teamId) {
return User.find({teamId: teamId});
}
module.exports.getTeam = getTeam;
Run Code Online (Sandbox Code Playgroud)
一个简单的测试如下所示:
// team.spec.js
var Team = require('./team');
var User = require('./user');
describe('Team', function() {
it('#getTeam', function* () {
var users = [{id: 1, id: 2}];
this.sandbox.stub(User, 'find', function() {
return Promise.resolve(users);
});
var team = yield team.getTeam();
expect(team).to.eql(users);
});
});
Run Code Online (Sandbox Code Playgroud)
VS DI:
// team.js
function Team(options) {
this.options = options;
}
Team.prototype.getTeam …Run Code Online (Sandbox Code Playgroud) .net javascript dependency-injection node.js dependency-inversion