1

这是一个非常抽象的问题,我不一定要寻找答案或实现,而是寻找可能使用的方法或可能阅读的材料的方向。

本质上,我正在为许多不同形式的某些数据创建存储方案,其中一种是 XML。当我从 XML 文件加载保存的数据时,我想从 XML 数据创建用户对象。

我在 XML 层次结构中有一个属性,它提供了一个链接到将要创建的对象类型的定义;但是,每种类型的对象都有几种不同的实现,我想根据它们提供的元素节点在运行时动态选择要创建的对象,而不是让用户或任何阅读 XML 的人担心或知道这一点。

因此,我解析 XML 数据的例程分为三个步骤:

(1) 解析所有的 XML 元素并保存为局部变量

(2) 根据我们收集到的变量,实例化合适的对象

(3) 用数据填充对象

因此,作为更具体的细分,我的代码最终看起来像这样(伪代码,用 C# 编写的程序):

// Object we're creating
GenericType object;

// Variables declarations
DURATION = "duration"
duration = 0;
...

// Step 1: Parse XML elements
switch(element.name)
{
  case element.name = DURATION:
    duration = element.value;
  case ...
}

// Step 2: Decide which object to instantiate, based on which variables were collected
// (variable analysis omitted for succinctness)
if(meetsRequirementsForObjectFoo())
  object = new Foo();
if(meetsRequirementsForObjectFooBar())
  object = new FooBar();
...

// Step 3: Populate object with data
Foo.setDuration(duration);
...

我的问题是在抽象这些数据和消除这个过程的一些重复性方面我有什么选择/解决方案?最后,我基本上是完全基于 XML 文件中的元素创建一个新的用户对象;问题是我不知道要创建哪个对象,直到我基本上读取了所有数据。

对于可能有用的现有设计理念/模式的任何帮助或参考,我将不胜感激!

4

1 回答 1

0

这将是工厂设计模式的绝佳候选者。您可以创建一个将 XML 作为输入(或解析的变量,无论哪种方式)的工厂,并且它们根据该输入决定返回哪个对象,假设所有对象都被编程为类似的接口。否则,将 XML 反序列化为与 XML 结构匹配的类可能是最简单的,而且工作量要少得多。有关更多详细信息,请参阅在 C# 中将 XML 反序列化为对象。

于 2013-06-07T05:37:13.230 回答