【发布时间】:2017-04-20 15:58:46
【问题描述】:
我试图让模块对我正在使用的其他模块了解更少。 例如,我管理用户创建的控制器将采用数据库模块并使用它来创建用户。它将首先解析req中的细节,然后将其传递给数据库模块,调用特定的函数。
registerController.postUser = function(req, res, next){
email = req.body.email;
password = req.body.psw;
var pswHash = crypto.createHmac('sha256',secret).update(password).digest('hex');
db.register.createUser(email,pswHash);
}
在这种情况下,控制器模块知道我的 db 模块有一个 .register.creatuser 函数。如果我想改变数据库模块的组织,我也必须来修改这部分代码。你认为这是否足够分离?我是否应该单独传入函数而不是整个 db 模块,例如,让上面的代码再接受一个参数,即 createUser 函数并使用它而不是执行 db.register.createUser。
【问题讨论】:
-
我建议你为你拥有的每个服务创建一个模块,例如注册模块、产品模块、订单模块,而不是在 db 模块中。 DB 模块应该是这些服务的依赖项,而不是持有者。应该有一个层次结构,如:控制器 -> 服务 -> 数据库 |加密,通常低于级别不知道高于级别。记住一个模块组的功能。
标签: node.js architecture software-design