2011-01-12 4 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

+2

XmlDocument가 XmlDocument를 래핑합니까? 에쉬. –

+0

@ 라이언 : 거북이가 줄곧 있습니다. – Amy

답변

4

대신이 로직을 팩토리 메서드에 넣을 수있는 팩토리 패턴을 사용해야합니다.

그래서 당신이 끝장 :

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

그래서 대신 간단한 새로운 된 XmlDocument()를하고 ;, 당신은 정적 GetNewDocument() 메서드 호출을 할 것입니다.

+0

불행히도 그것은 비 유적으로 비 유적으로 신경계를 응용 프로그램에서 추출해야합니다. 그러나 나는 그것이 좋다. 나는 이것에 대해 조금 생각할 것이고, 갈 길이 될 것입니다. –

+0

나는 당신이 그것을 꺼내야 할 것 같아 그렇지 않으면 당신은 매우 해키하고 재미있는 것을 얻을 것이다. – Kris

+0

당신의 옛 팀이 저주를 썼습니다 :) –

2

아치를 재 작업합니다. 당신은 우려의 분리를 놓치고 있습니다. 왜 팩토리를 사용하여 캐시에 그 이름이 있는지 확인하고 그 객체를 돌려 주면 어떨까요? 자체적으로 생성하려고하는 객체는 나에게 지저분 해 보인다.

관련 문제