2011-01-12 59 views
1

我有一个包装的XmlDocument类,并在其中,我想检查是否有一个具有相同名称的缓存的XmlDocument对象,然后“变成”该对象。有一个更好的方法吗?包装对象是否可以“变成”相同类型的对象?

namespace myXmlUtilities { 
    class SpecificAutoLoadingCmsXmlDocument : System.Xml.XmlDocument { 
    private string documentName = "joiseyMike.xml"; 

    public void loadFromCms() { 
     if (cache[documentName] != null) 
      LoadXml(((XmlDocument)cache[documentName]).OuterXml); 
     else 
      // ... load from the CMS's database. 
    } 

    public SpecificAutoLoadingCmsXmlDocument() { 
     loadFromCms(); 
    } 
    } 

编辑:我让这个例子更真实一点。为早期的快速和肮脏的版本道歉。

+3

为什么不确定所有的加载来自缓存的源?为什么你想让它像XmlDocument一样行事?在构建任何文档对象之前检查缓存不是更好吗? – Skurmedel 2011-01-12 19:18:16

+2

XmlDocument包装XmlDocument? Eesh。 – 2011-01-12 19:20:55

回答

4

您应该使用工厂模式,而不是将其放入工厂方法中。

所以,你会结束:

public static XmlDocument GetNewDocument(string documentName) { 
    if (cache[documentName] != null) 
     return cache[documentName]; 
    else 
     return new XmlDocument(); 
} 

因此,而不是做一个简单的新的XmlDocument();你会做的静态GetNewDocument()的调用方法。

2

我会在这里重新修复拱门。你错过了一个问题的分离。为什么不使用工厂来检查缓存是否有该名称并将该对象返回给您?试图构建自己的对象似乎对我来说很混乱。

相关问题