包装对象是否可能“成为”同一类型的对象?

时间:2011-01-12 19:13:43

标签: c# xml object wrapper xmldocument

我有一个包装的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();
    }
  }

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

2 个答案:

答案 0 :(得分:4)

您应该使用工厂模式,这样您就可以将此逻辑放入工厂方法中。

所以你最终得到了:

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

因此,您不必执行简单的新XmlDocument();而是调用静态GetNewDocument()方法。

答案 1 :(得分:2)

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