2011-12-22 4 views
2

私はドキュメントクラスを使用しています。はじめてNew()、Open()、Save()などのメソッドを持つ共通ファイル用です。Documentクラスのモデリング方法

New()とOpen()はIDocumentを返します。保存しても何も返されません。 上記の図のとおりです。私のプログラムで

enter image description here

、これは、XMLまたはzipファイル拡張子を使用する必要があります。 XMLファイルには問題はありますが、すべてのメソッドがそれです。しかし、私はzipファイルに問題があります。プログラムがOpen()を実行し、zipからすべてのxmlファイルを抽出し、すべてのファイルを返すとき、私はこれを行う予定でした。しかし、私のOpen()はドキュメントを返すだけです。

CanExtract()という別のプロパティを作成する予定でしたが、これは良い考えではないかもしれません。私はちょうど良いデザインを作成し、理解できるようにしたい。その後

public IEnumerable<IDocument> Open() 

代わりの

public IDocument Open() 

をあなたは、XMLを開いたとき、それはIEnumerableを1つのIDocumentを含むとすることができます返すファイル:

+0

[System.IO.Packaging名前空間のオープンパッケージング条約](http://msdn.microsoft.com/en-us/library/system.io.packaging.aspx)を見ましたか?この2つの状況をかなりうまく処理します。 – user7116

+0

@sixlettervariablesうわー、面白いね。だから、私がやっていることは必要ではないと思いますか? – Darf

+0

私は頼んで、借りて、ソルジャーを盗む。 'System.IO.Packaging'を直接使用することを拒否した場合は、そのモデルまたは少なくともそのイディオムを採用することができます。 – user7116

答えて

5

変更あなたのopen()関数は、IEnumerableをIDocumentの戻りただそれを使用してください。 zipファイルを開くと、zip内のすべてのファイルがIEnumerable内のIDocumentsとして返されます。

0

リターンプロパティをリストに変更することをおすすめします。次に、1つまたは20のファイルが返されたかどうかに関わらず、同じコードで文書のリストを処理できます。

複数のファイルを受け入れるためのオーバーロードを作成および保存することもできます。これらのオーバーロードを使用すると、自動ジップを実行できます。