Я новичок в разработке NodeJs из мира .NET Я ищу в Интернете лучшие практики, регулирующие DI/DIP в Javascript
В .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);
});
});
VS DI:
// 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);
});
});