我正在Node.js中寻找一种简洁的设计模式,以允许我在彼此引用时将两个类放在单独的模块中。
例如:我有Node
和NodeCollection
对象。显然,NodeCollection
必须知道什么是Node
,但是Nodes
自己为自己的孩子持有一个NodeCollection
对象。
当前,我在需要时配置Node构造函数。
nodeCollection.js
const Node=require('./node')(NodeCollection)
function NodeCollection(....){
// do stuff with Node objects
}
module.exports = NodeCollection'
node.js
function Node(NodeCollection){
function _Node(...){
this.children = new NodeCollection();
//do stuff
}
return _Node;
}
module.exports = Node;
有没有更好的方法来设计这个?
附录:似乎存在一些误解:我并不是要更好地设计NodeCollection或Node对象。这些被提供作为玩具的例子。通常,在这样的示例中,这两个类不能彼此不可知。面对这样的安排,我正在寻找一种设置Node.js模块的方法。我可以通过将两个类放在同一个模块中来解决问题,但是它们又大又复杂,以至于需要保证自己的文件。
谢谢
最佳答案
我认为您无需区分Node
和Nodes
。这样的基本操作将为您提供树形结构。
class Node {
constructor(data) {
this.data = _.omit(data, 'children');
this.children = (data.children || []).map(child => new Node(child));
}
}
const tree = new Node({
name: 'bob',
children: [
{ name: 'bill' },
{ name: 'jim' },
{ name: 'luke' }
]
});
// yields...
{
data: {name: 'bob'},
children: [
{
data: {name: 'bill'}
}
...etc
]
}