Возможно ли для обернутого объекта «стать» объектом того же типа? - PullRequest
1 голос
/ 12 января 2011

У меня есть обернутый класс 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 ]

4 голосов
/ 12 января 2011

Вместо этого вы должны использовать фабричный шаблон, который позволит вам применить эту логику к фабричным методам.

Итак, вы получите:

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

Таким образом, вместо простого нового XmlDocument (); вы должны вызывать статический метод GetNewDocument ().

2 голосов
/ 12 января 2011

Я бы переделал арку здесь. Вам не хватает разделения проблем. Почему бы не использовать фабрику, чтобы проверить, имеет ли кэш это имя, и вернуть вам этот объект? Мне кажется, что объект, пытающийся создать себя, беспорядочный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...