C# 包裹的对象是否可能;变成;同一类型的对象?

C# 包裹的对象是否可能;变成;同一类型的对象?,c#,xml,object,wrapper,xmldocument,C#,Xml,Object,Wrapper,Xmldocument,我有一个包装好的XmlDocument类,在其中,我想检查是否有一个缓存的XmlDocument对象具有相同的名称,然后“变成”该对象。有更好的方法吗 namespace myXmlUtilities { class SpecificAutoLoadingCmsXmlDocument : System.Xml.XmlDocument { private string documentName = "joiseyMike.xml"; public void loadFromC

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

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

我想在这里重做拱门。你错过了一个单独的关注点。为什么不使用工厂检查缓存是否具有该名称并将该对象返回给您?在我看来,一个试图构造自己的物体看起来很凌乱。

我会在这里重做拱门。你错过了一个单独的关注点。为什么不使用工厂检查缓存是否具有该名称并将该对象返回给您?在我看来,试图构造自身的对象似乎很混乱。

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

所以你最终会得到:

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

因此,与其执行简单的新XmlDocument();,您需要调用静态GetNewDocument()方法。

您应该使用工厂模式,该模式允许您将此逻辑放入工厂方法中

所以你最终会得到:

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

因此,与其执行简单的新XmlDocument();,您需要调用静态GetNewDocument()方法。

为什么不确保所有加载都来自具有缓存的源?如果要检查构造,为什么希望它像XmlDocument一样工作?在构造任何文档对象之前检查缓存不是更好吗?XmlDocument包装XmlDocument?伊什。@Ryan:一路下来都是海龟。@Skurmedel/Greg-这只是一个快速而肮脏的例子;我没有直接剪切粘贴。@Ryan:是的,这是这里标准的一部分。把所有东西都包起来,然后用包装纸。不能说我太喜欢它了。为什么不确保所有的加载都来自一个带有缓存的源呢?如果要检查构造,为什么希望它像XmlDocument一样工作?在构造任何文档对象之前检查缓存不是更好吗?XmlDocument包装XmlDocument?伊什。@Ryan:一路下来都是海龟。@Skurmedel/Greg-这只是一个快速而肮脏的例子;我没有直接剪切粘贴。@Ryan:是的,这是这里标准的一部分。把所有东西都包起来,然后用包装纸。不能说我太喜欢它。不幸的是,这需要比喻性地从应用程序中剥离神经系统。但是,我喜欢它。我会想一想,这可能是一条路。我想你必须把它撕下来,否则你会得到一些非常黑客和不好玩的东西。你的老团队写了这该死的东西:)不幸的是,这需要比喻性地把应用程序的神经系统撕下来。但是,我喜欢它。我会想一想,这可能是一条路。我想你必须把它撕下来,否则你会得到一些非常粗糙和不有趣的东西。你的老团队写了这该死的东西:)