我是来自 .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;
一个简单的测试看起来像这样:
// 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);
});
});
与迪:
// team.js
function Team(options) {
this.options = options;
}
Team.prototype.getTeam = function(teamId) {
return this.options.User.find({teamId: teamId})
}
function create(options) {
return new Team(options);
}
测试:
// team.spec.js
var Team = require('./team');
describe('Team', function() {
it('#getTeam', function* () {
var users = [{id: 1, id: 2}];
var fakeUser = {
find: function() {
return Promise.resolve(users);
}
};
var team = Team.create({
User: fakeUser
});
var team = yield team.getTeam();
expect(team).to.eql(users);
});
});