2

コレクションWebファイルをメモリ内でモデル化する必要がありますが、それらの間の関係。つまり、ファイルA(htmlなど)には、ファイルB(cssなど)およびファイルC(javascriptなど)へのリンクが含まれている場合があります。また、ファイルDにもファイルBが必要な場合があります。ファイルを削除する場合、AIは、使用するファイル(ファイルBなど)が別のファイル(ファイルDなど)でも使用されていないことを確認する必要があります。おそらく次のようなものです:

  List<WebFile> list_of_webfiles

  public class WebFile
  - string url
  - bool parentFile

  public class FileRelationship
  - private WebFile parentWebFile;
  - private WebFile childWebFile;

質問-これをC#でモデル化するための最良の方法は何でしょうか?(例:どのコレクションタイプとモデル化方法)

注-メモリ(データベースなし)でモデル化する必要があり、保存するにはXMLにもシリアル化できる必要があります。私が言っていることの例は、このように見えるものでしょう...

        XmlSerializer serializer = new XmlSerializer(typeof(List<WebFile>));
        TextWriter textWriter = new StreamWriter(CONFIG_FILE_PATH);
        serializer.Serialize(textWriter,  list_of_webfiles);
        textWriter.Close();

ありがとう

4

2 に答える 2

1

これは、階層的な「ツリー」関係を意味しているようです。

Class WebFile:
- URL : string
- Parent : WebFile
- Children : WebFile[] (could be a list depending on the need)

それからどこかにあなたは

List<WebFile> webFiles;

このアプローチでは、Webファイルのツリーをトラバースして関連するものを見つけるのは簡単ですが、すべてのファイル自体をリストするのは困難です。

または、ファイルと関係のリストを個別に保存することもできます

Class WebFile
- URL : string

Class WebFileRelationship
- Parent : WebFile
- Child : WebFile

そしてあなたは2つのコンテナを持っています

List<WebFile> webFiles;
List<WebFileRelationship> relationships;

このアプローチでは、すべての関係またはすべてのファイルを簡単に一覧表示できますが、個々の関係を判別するのは困難です。

それはすべてアプリケーションによって異なりますが、個々のファイルまたは関係についての詳細情報が必要ですか?

于 2009-10-06T05:44:08.620 に答える
1

(Bを必要とする複数のファイルに関して)重複しているという事実は、(異なる親からの)Bを複数回ネストする必要があるため、最も明白な「requires」構造をツリーとして使用するのは面倒であることを意味します。いくつかのオプション:

  • オブジェクト参照をオブジェクトモデルに保持しますが、ファイルには名前(またはその他の参照)のみをリストします。実行は比較的簡単ですが、逆シリアル化後に修正が必要です
  • リレーションシップに名前(またはその他の参照)のみをリストし、これをオブジェクトモデルにミラーリングします。つまり、「file.Parent」はキーであり、別のオブジェクトではありません。
  • DataContractSerializer完全なオブジェクトモデルを用意し、preserve-object-referencesを有効にするなどのグラフシリアライザーを使用する

私はおそらく最後の2つから選択します。最後のものには「あまりきれいではない」xmlがありますが、実装は比較的簡単です。しかし、真ん中のオプションを使用して、オブジェクトモデルにキー参照だけを入れたいと思うでしょう。

[XmlType("file"), XmlRoot("file")]
public class File {
    [XmlAttribute("name")]
    public string Name {get;set;}
    [XmlElement("ref")]
    public List<string> References {get;set;}
    public File() {References = new List<string>();}
}

純粋なOOではないかもしれませんが、簡単に実行できます。また、データを複製する必要はありません。上記のように保存すると、いつでもスキャンして「このファイルを使用しているもの」を確認できます(必要に応じてインデックスを付けます)。しかし、両方向(つまり「UsedBy」)の関係を維持しようとするのは悪夢です。

于 2009-10-06T06:35:34.913 に答える