2011-01-12 9 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をラップしますか? Eesh。 –

+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

ここではアーチを再作成します。あなたは懸念の分離を見逃しています。ファクトリを使用して、キャッシュにその名前があるかどうかをチェックし、そのオブジェクトを返すのはなぜでしょうか?自分自身を構築しようとしているオブジェクトは、私に乱雑に思えます。

関連する問題