这似乎是一个奇怪的问题,但我正在构建一个模块,用于抽象出不同数据存储选项的某些逻辑。想法是任何使用该模块的人都可以将它与MongoDb或Redis或SQL一起使用或(在此处插入您想要的任何选项)
我在每个实现中都有一个基本接口,通过为每个不同的数据存储选项导出相同的函数名称和签名。
现在我有helper = require(process.env.data_storage_helper)
然后可以以相同的方式使用帮助程序。
这是不好的做法,如果是这样,为什么?是否有更好或建议的方法来实现这种抽象?
答案 0 :(得分:1)
这不是技术上不好的做法,但我实际上会添加一个间接级别。相反,将这些选项存储在配置文件中,这些选项基于NODE_ENV
或其他环境变量进行挑选。然后在配置对象中使用相同的密钥,无论如何。使用此框架的一个很好的示例是kraken.js,它根据NODE_ENV
自动加载配置文件。
然后你可以在Kraken启动后抓住配置对象的句柄(或者你最终使用的任何东西 - 它在底层使用confit - 你总是可以直接使用这个库),你可以抓住"data_storage_helper"
键,查看您的商店在做出决策的存储模块中所支持的商店。
这种方法的最大优点是,现在如果您想要更改数据存储或其他模块的任何其他行为,您只需更新JSON文件即可。 : - )