javascript 中的构建器设计模式
Builder design pattern in javascript
需要在解析 XML 后构建自定义 JSON 文件。长话短说,有一个 XML 文件,必须从中创建一个 JSON 文件,但并非来自 XML 的所有信息都必须出现在 JSON 中。它必须只使用 JS 和 Node.js 来完成。为了解析 XML,我使用了 xmldom 和 fs。
现在是卡住的部分。要创建一个 JSON 文件,我不能使用已经在 Web 上可用的代码片段,因为 Node.js 的例子很少,而且我需要从 XML 中省略很多东西。循环也是不可能的,因为 XMLDOM 是递归的。现在我使用这段代码来做到这一点:
var builder = function() {
this.meta = {};
}
builder.atRoot = function(library) {
this.meta["!name"] = library;
this.meta["!define"] = {};
this.define = this.meta["!define"];
}
builder.atNamespace = function(name) {
this.namespace = {};
this.namespace["!category"] = "namespace";
this.namespace["!description"] = "";
this.define[name] = this.namespace;
}
builder.atDescription = function(method){
this.class = {};
this.class["!Accordion"] = method;
this.class["!AccordionSection"] = method;
this.class["!ApplicationHeader"] = method;
....
}
// and so on
builder.toJson = function() {
var s = JSON.stringify(this.meta);
console.log(s);
}
但是没用。现在,可能是我根本不明白 builder 是如何工作的,或者这是错误的方式。任何关于错误的想法,或对构建器设计模式的额外解释将不胜感激。
非常感谢。
Builder
通常意味着递归。我不完全明白你需要什么,但似乎你需要创建一个属性名称的白名单,然后递归地将属性复制到新对象中,然后将其序列化为 JSON.
需要在解析 XML 后构建自定义 JSON 文件。长话短说,有一个 XML 文件,必须从中创建一个 JSON 文件,但并非来自 XML 的所有信息都必须出现在 JSON 中。它必须只使用 JS 和 Node.js 来完成。为了解析 XML,我使用了 xmldom 和 fs。
现在是卡住的部分。要创建一个 JSON 文件,我不能使用已经在 Web 上可用的代码片段,因为 Node.js 的例子很少,而且我需要从 XML 中省略很多东西。循环也是不可能的,因为 XMLDOM 是递归的。现在我使用这段代码来做到这一点:
var builder = function() {
this.meta = {};
}
builder.atRoot = function(library) {
this.meta["!name"] = library;
this.meta["!define"] = {};
this.define = this.meta["!define"];
}
builder.atNamespace = function(name) {
this.namespace = {};
this.namespace["!category"] = "namespace";
this.namespace["!description"] = "";
this.define[name] = this.namespace;
}
builder.atDescription = function(method){
this.class = {};
this.class["!Accordion"] = method;
this.class["!AccordionSection"] = method;
this.class["!ApplicationHeader"] = method;
....
}
// and so on
builder.toJson = function() {
var s = JSON.stringify(this.meta);
console.log(s);
}
但是没用。现在,可能是我根本不明白 builder 是如何工作的,或者这是错误的方式。任何关于错误的想法,或对构建器设计模式的额外解释将不胜感激。
非常感谢。
Builder
通常意味着递归。我不完全明白你需要什么,但似乎你需要创建一个属性名称的白名单,然后递归地将属性复制到新对象中,然后将其序列化为 JSON.