Frage

Ich habe eine Art Baumstruktur, die eine Hierarchie von Schichten in einer Karte darstellen, durch Typen von Schichten und Kategorien unterteilt. Jeder Knoten kann eine andere Klasse für verschiedene Arten von Schichten (aber alle Knoten implementieren eine gemeinsame Schnittstelle).

Ich brauche diese Klasse zu einem ASP.NET TreeView-Steuerelement zu konvertieren. Jeder Knoten in dem Eingangsbaum ein Knoten in der Ausgangsstruktur mit Eigenschaften festgelegt, die auf dem Typ des Knotens abhängig sind. Ich will nicht die Eingangsbaumklassen die UI-Klassen kennen, so kann ich eine „ToTreeViewNode ()“ Methode in ihnen nicht schreiben. Es gibt derzeit vier Arten von Betonknotenklassen, von denen 2 Verbund sind (enthalten Kind-Knoten) und 2 von ihnen sind Blätter. Dies könnte sich in Zukunft ändern.

Es fühlt sich an wie ein Design-Muster verwendet werden, hier ist Juckreiz, können Sie mir helfen, was es ist?

War es hilfreich?

Lösung

Besucher vielleicht Eingangsbaum zu gehen und bauen UI-Tree entspricht?

Andere Tipps

Meine .NET ist ein wenig rostig, aber was tun Sie könnte, ist eine separate Unterklasse von TreeNodeCollection und möglicherweise TreeNode erstellen, geben Sie ihnen Zugriff auf Ihre Struktur ein Assign Ihre TreeNodeCollection an den Knoten Eigenschaft die TreeViewControl.

Die TreeNodeCollection Wrapper wird Ihre Struktur in eine TreeViewControl Struktur umwandeln. Die TreeNode Klasse wird wahrscheinlich einen Verweis auf Ihre eigenen Knoten enthalten, wird aber Ihre Knoten in TreeNodes konvertieren.

Mit anderen Worten, indem diese beiden Schnittstellen Implementierung Sie Ihr Modell der Schnittstelle zum einen passen die TreeViewControl verwendet,

Wenn Sie das Besuchermuster verwenden, um eine parallele Struktur zu schaffen, würden Sie es jedes Mal laufen müssen gibt es eine Änderung. Oder würden Sie noch Ihren Knoten mit der TreeNode Schnittstelle wickeln müssen.

Siehe Adapter Muster

Ich bin nicht sicher, was Sie versuchen zu erreichen, aber (wie ich es verstehe) Ich glaube, dass, wenn Sie würde beide verwenden:

  1. Verbund - für die Knoten (Baum)
  2. Strategie - für die Umsetzung der Zeichnung "algotithm"

, so dass Sie haben:

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.
    }
}

die große Sache ist:

  1. Sie müssen nicht rekursive Zeichnung jeder Zeichnung selbst
  2. Ihre Zeichnung Strategie während der Laufzeit oder während einer Instanz eines Objekts ändern
  3. Sie können jeden von euch Klassenhierarchie ohne Abhängigkeit in der anderen Struktur vergrößern.
  4. denken Sie daran, wie die Kontrollen in Ihrem Web-Formulare
  5. außerdem jedes Objekt ist (SRP) Einzel Prinzip Verantwortung

Genießen.

Es klingt sicher für mich wie Sie wollen hier Model-View-Controller verwenden. Ihr Baum Map-Struktur ist wahrscheinlich das Modell, die Ansicht ist das TreeView-Steuerelement -. Sie wahrscheinlich brauchen eine Controller-Klasse von einer Art hinzuzufügen, um die Interaktion zwischen den beiden zu verwalten

Hope Ihre Frage hat Recht:

Von der "O'Reilly - Design von Interfaces Muster für Effektive Iteration Design"

Sie haben diese zwei Muster, die im Allgemeinen mit Bäumen zugeordnet bekommen:

  • "Cascading Listen"
  • "Treemap"

Das Kapitel 6 dieses Buches als etwa zwölf Design paterns Muster verwendet werden, um komplexe Daten zu zeigen.

habe ich noch keine Links zu diesen Mustern gefunden, so kann ich Ihnen das Buch in der örtlichen Bibliothek überprüfen erraten müssen. Ich fand diese Webseite, die Sie möglicherweise einige paterns haben zu helfen, aber ich habe überprüft und es nicht diese beiden, oder die, die aus dem Kapitel 6 enthalten. http://www.welie.com/patterns/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top