node.js导出方法facade设计模式

node.js exporting methods facade design pattern

本文关键字:facade 设计模式 方法 js node      更新时间:2023-09-26

我正试图在node.js应用程序中遵循facade设计模式,其中我有一个对象,该对象与名为controller.js的应用程序的其余部分一起用作facade。控制器控制对对象user.js、animal.js和house.js的调用,这些对象都是单独的文件。

在controller.js中,我做

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

我想在另一个文件(客户端)中调用类似controller.getHouse()的东西。我如何做到这一点,而不必调用housecontroller.getHouse()

我的每个控制器的格式如下

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

我有点困惑于如何正确地出口东西才能让它发挥作用。我在controller.js中导入/导出控制器及其方法,如下所示

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

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

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

根据您的代码/命名,您可以在controllers文件夹中有一个类似的文件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
};

尽管我不推荐它,因为您正在减少在未来中提供该模块更多功能的机会