0

マップ内のレイヤーの階層を表す一種のツリー構造があり、レイヤーの種類とカテゴリで分割されています。各ノードは、異なるタイプのレイヤーに対して異なるクラスにすることができます (ただし、すべてのノードは共通のインターフェースを実装します)。

そのクラスを ASP.NET TreeView コントロールに変換する必要があります。入力ツリーの各ノードは出力ツリーのノードであり、ノードのタイプに依存するプロパティ セットがあります。入力ツリー クラスに UI クラスを認識させたくないので、"ToTreeViewNode()" メソッドを記述できません。現在、具象ノード クラスには 4 つのタイプがあり、そのうち 2 つは複合 (子ノードを含む) で、2 つはリーフです。これは将来変更される可能性があります。

使いたくてうずうずするデザインパターンがここにあるような気がします。それが何であるかを見つけるのを手伝ってくれませんか?

4

5 に答える 5

2

おそらく、入力ツリーをたどって対応する UI ツリーを構築するための訪問者でしょうか?

于 2008-10-07T07:34:58.797 に答える
1

あなたが何を達成しようとしているのかはわかりませんが、(私が理解しているように)両方を使用する場合は次のように思います。

  1. コンポジット-ノード(ツリー)用
  2. 戦略-図面「アルゴリズム」の実装のため

だからあなたは持っているでしょう:

public class Node
{
   public IDraw genericDrawing;
   public Node[] Childs;
   public Node() { //init you genericDrawinf }
   public void Draw() 
   {
      genericDrawing.Draw(this);
      foreach (Node child in Childs)
      {
         child.Draw();
      }
   }
}

public interface IDraw
{
    void Draw(Node node);
}
public class SimpleDraw : IDraw
{
    public void Draw(Node node)
    {
       // code your stuf in here.
    }
}

素晴らしいことは:

  1. それぞれの描画自体を再帰的に描画する必要はありません
  2. 描画戦略は、実行時またはオブジェクトのインスタンス中に変更される可能性があります
  3. 他の構造に依存することなく、クラス階層のそれぞれをスケールアップできます。
  4. Webフォームのコントロールのように考えてください
  5. さらに、各オブジェクトは(SRP)単一責任原則です

楽しみ。

于 2008-10-11T10:02:09.173 に答える
1

私の .NET は少し錆びていますが、TreeNodeCollection とおそらく TreeNode の別のサブクラスを作成し、構造へのアクセスを許可し、TreeNodeCollection を TreeViewControl の Nodes プロパティに割り当てます。

TreeNodeCollection ラッパーは、構造を TreeViewControl 構造に変換します。TreeNode クラスにはおそらく独自のノードへの参照が含まれますが、ノードは TreeNode に変換されます。

つまり、これら 2 つのインターフェイスを実装することで、モデルのインターフェイスを TreeViewControl が使用するインターフェイスに適合させます。

Visitor パターンを使用して並列構造を作成する場合、変更があるたびにそれを実行する必要があります。または、ノードを TreeNode インターフェイスでラップする必要があります。

アダプターのパターンを参照してください

于 2008-10-08T10:30:57.227 に答える
0

ここで Model-View-Controller を使用したいように思えます。ツリー マップ構造はおそらく Model で、View は TreeView コントロールです。おそらく、2 つの間の相互作用を管理するために、ある種の Controller クラスを追加する必要があります。

于 2008-10-07T07:14:06.873 に答える
0

あなたの質問が正しいことを願っています:

「O'Reilly - Designing Interfaces Patterns for Effective Iteration Design」より

一般的にツリーに関連付けられる次の 2 つのパターンがあります。

  • 「カスケード リスト」
  • 「ツリーマップ」

この本の第 6 章には、複雑なデータを表示するために使用される約 12 のデザイン パターンがあります。

これらのパターンへのリンクが見つからなかったので、地元の図書館で本をチェックする必要があると思います。私はあなたを助けるためにいくつかのパターンを持っているかもしれないこのウェブページを見つけましたが、私がチェックしたところ、それらの2つ、または第6章のものは含まれていません. http://www.welie.com/patterns/

于 2008-10-08T10:51:15.903 に答える