【发布时间】:2013-06-05 10:16:52
【问题描述】:
我最初在 nodejs 中有一个工作应用程序,它的所有代码都在一个文件中,使用构造函数和 IIFE 分割成离散的块。为了提供合理的解耦和分离,我一直在尝试重构程序,以便每个块都存在于不同的文件中,但我遇到了问题。
程序分为三个核心块:
初始化连接到 Redis 并返回一个 redis 客户端和 dataStore 对象的数据存储构造函数。
function CreateDataStore(storePort, storeUrl, passwd) {
var client
, datastore;
//create the redis client
//create the datastore
//exports
return {
"redisClient": client,
"dataObject": createSiteUpdater("")
};
}
var dataStore = CreateDataStore("xxxx","xxxx","xxxx");
var client = dataStore.redisClient;
var testResults = dataStore.dataObject;
一个网络爬虫构造器,它使用redis客户端并将数据存储在数据存储对象中。
function CreateWebCrawler(){
//do some stuff
//initialise robots.txt parser
return function() {
//crawl a page
//add page data to testResults object
}
}
读取相同数据存储对象并将数据发送到前端客户端的网络服务器构造函数。
function CreateWebServer() {
//do some stuff
//initialise an express webserver
//initialise socket.io
//send testResults object out over a socket.
}
当它们在同一个文件中时,这一切都很好,但现在我想将它们重构为三个单独的文件,我对它们将如何相互交谈感到困惑。
在新架构下,网络爬虫模块和网络服务器模块都“需要”数据存储模块,该模块导出一个 dataStore 对象。我需要做的是让网络爬虫模块对其数据存储对象所做的任何更改都复制到网络服务器模块可用的数据存储对象版本中。
我已经尝试查看所有 nodejs 文档,并且还进行了很多谷歌搜索,但我无法确定一个由 commonjs 模块的导出语句返回的对象是否相同当对象分别返回到依赖关系图上方的两个不同的其他模块时,堆上的对象。如果这是真的,谁能向我解释一下,最好为我提供一个指向正确文档的链接以正确理解行为?
【问题讨论】:
标签: javascript node.js refactoring commonjs