Pregunta

Tengo una especie de estructura de árbol que representa una jerarquía de capas en un mapa, dividida por tipos de capas y categorías. Cada nodo puede ser una clase diferente para diferentes tipos de capas (pero todos los nodos implementan una interfaz común).

Necesito convertir esa clase en un control TreeView de ASP.NET. Cada nodo en el árbol de entrada es un nodo en el árbol de salida, con propiedades establecidas que dependen del tipo de nodo. No quiero que las clases del árbol de entrada conozcan las clases de UI, por lo que no puedo escribir un " ToTreeViewNode () " Método en ellos. Actualmente hay 4 tipos de clases de nodos concretos, 2 de ellos son compuestos (contienen nodos secundarios) y 2 de ellos son hojas. Esto podría cambiar en el futuro.

Se siente como si hubiera un patrón de diseño aquí para usar, ¿puedes ayudarme a encontrar lo que es?

¿Fue útil?

Solución

Un Visitante para caminar el árbol de entrada y construir el árbol correspondiente de la IU?

Otros consejos

Mi .NET está un poco oxidado, pero lo que podrías hacer es crear una subclase separada de TreeNodeCollection y posiblemente TreeNode, darles acceso a tu estructura y asignar your TreeNodeCollection a la propiedad Nodes de el TreeViewControl.

El contenedor TreeNodeCollection convertirá su estructura en una estructura TreeViewControl. La clase TreeNode probablemente contendrá una referencia a sus propios nodos, pero convertirá sus nodos en TreeNodes.

En otras palabras, al implementar esas dos interfaces, adapta la interfaz de su modelo a la que utiliza el TreeViewControl,

Si utiliza el patrón de visitante para crear una estructura paralela, tendrá que ejecutarlo cada vez que se produzca un cambio. O aún tendría que envolver su nodo con la interfaz TreeNode.

Consulte Patrón de adaptador

No estoy seguro de lo que estás tratando de lograr, pero (como lo entiendo) creo que si vas a usar ambos:

  1. Compuesto: para los nodos (árbol)
  2. Estrategia: para la implementación del Algotitmo de dibujo "

para que tengas:

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

la gran cosa es:

  1. no necesitas un dibujo recursivo para cada uno de ellos;
  2. su estrategia de dibujo puede cambiar durante el tiempo de ejecución o durante una instancia de un objeto
  3. puede escalar cada una de las jerarquías de su clase sin dependencia en la otra estructura.
  4. piénselo como los controles en sus formularios web
  5. además, cada objeto es (SRP) Principio de Responsabilidad Única

Disfruta.

Seguro que me suena como si quisieras usar Model-View-Controller aquí. La estructura de su mapa de árbol es probablemente el Modelo, la Vista es el control TreeView, probablemente necesite agregar una clase de Controlador de algún tipo para administrar la interacción entre los dos.

Espero que tu pregunta sea correcta:

De " O'Reilly - Diseño de patrones de interfaces para un diseño de iteración efectivo

Tienes estos dos patrones que generalmente se asocian con los árboles:

  • " Listas en cascada "
  • " Treemap "

El capítulo 6 de este libro contiene alrededor de doce patrones de diseño que se utilizan para mostrar datos complejos.

No encontré ningún enlace a estos patrones, así que supongo que necesitarás revisar el libro en la biblioteca local. Encontré esta página web que podría tener algunos padres para ayudarlo, pero lo he comprobado y no incluye esos dos, ni los del capítulo 6. http://www.welie.com/patterns/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top