数据抽象以消除交换机使用

时间:2013-06-07 05:28:19

标签: c# xml abstraction

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

基本上,我正在为许多不同形式的某些数据创建存储方案,其中一种是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文件中的元素创建一个新的用户对象;问题是,在我基本上阅读所有数据之前,我不知道要创建哪个对象。

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

1 个答案:

答案 0 :(得分:0)

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