node.js 导出方法门面设计模式

node.js exporting methods facade design pattern

我正在尝试在 node.js 应用程序中遵循外观设计模式,在该应用程序中,我将对象与名为 controller.js 的应用程序的其余部分一起使用作为外观。控制器控制对对象 user.js、animal.js 和 house.js 的调用,它们都是单独的文件。

在controller.js我做

var housecontroller = require("./controllers/housecontroller");
...

我想在另一个文件(客户端)中调用类似 controller.getHouse() 的东西。我该怎么做才能做到这一点而不必调用 housecontroller.getHouse()?

我每个控制器的格式如下

module.exports = {
    getHouse:function(){...},
    ...
}

我对如何正确导出内容以使其正常工作感到困惑。我 import/export controller.js 中的控制器及其方法如下

module.exports = {
    getHouse : housecontroller.getHouse,
    ...
};    

我在示例中只使用了房子,但这意味着我对用户和动物也使用了相同的方法,它们都有多种方法。在客户端中,我只是导入 controller.js 并使用它的方法。

var controller = require("./controller");
controller.getHouse();

根据您的 code/naming,控制器文件夹中可能有一个文件 controller.js,其中包含这样的内容

var housecontroller = require('./housecontroller');
var carcontroller = require('./carcontroller');

module.exports = {
  getHouse: housecontroller.controller,
  getCar: carcontroller.controller
};

客户端代码可以是:

var controller = require('./controllers/controller');
controller.getHouse();

我添加了 carcontroller 作为扩展的例子。

如果每个控制器只能提供一个功能,您可以将代码和这些示例更改为:

//housecontroller.js
module.exports = getHouse;

//controller.js
var housecontroller = require('./housecontroller');
var carcontroller = require('./carcontroller');

module.exports = {
  getHouse: housecontroller,
  getCar: carcontroller
};

虽然我不推荐它,因为您正在减少将来从该模块提供更多功能的机会