Wie weit gehen Methoden überschreiben, Eigenschaften, ... von einer Basisklasse z.B. .net TreeNode Klasse

StackOverflow https://stackoverflow.com/questions/824128

  •  05-07-2019
  •  | 
  •  

Frage

Ich bin auf einigen Anwendungen arbeiten, dass verwendet ein Steuerelement TreeView Business-Objekte zu repräsentieren. Derzeit ist die Verbindung zwischen Business-Objekten und TreeNodes wird durch die Tag-Eigenschaft des TreeNode gehalten. Ich bin nicht sehr glücklich mit diesem, weil ich die Verbindung falsch ist „dicht“ genug. Zum Beispiel könnte ein TreeNode Objekt ohne Business-Objekt sein, auch ich will das TreeNode Bild aktualisieren je nach Geschäft objact Zustand. Deshalb abgeleitet ich meine eigene TreeNode Klasse von TreeNode:

class ActionTreeNode : TreeNode
   {
      private Action mAction;

      public Action Action
      { get ... }

      public ActionTreeNode(Action action)
         : base()
      {
         if (action == null) throw new ArgumentNullException("action", "Paramter action must not be null.");

         mAction = action;
      }

    public void UpdateState()
      {
         switch (mAction.ActionState)
         {
            case ActionState.Passed:
               SelectedImageIndex = 3;
               ImageIndex = 3;
               break;
            case ActionState.Failed:
               SelectedImageIndex = 2;
               ImageIndex = 2;
               break;
            ...
         }

         return;
      }
   }

Mit dieser minimalen Ansatz Ich habe jedes Mal warf ich eine Eigenschaft oder Methode der Basisklasse aufrufen, die ein TreeNode-Objekt wie in „(ActionTreeNode) myNode.Parent“ zurückgibt. Die Lösung wäre jede Methode oder Eigenschaft außer Kraft zu setzen / überschreiben und ein Objekt von ActionTreeNode Typ zurück. Was denken Sie, ist es geeignet, den minimalen Ansatz zu nehmen oder würden Sie sich die Mühe nehmen alle Methoden, Eigenschaften, um neu zu implementieren Gießen zu vermeiden? Danke.

War es hilfreich?

Lösung

Ich mag den minimalen Ansatz. Wenn Sie sich über unübersichtlich Ihren Code mit Lasten von Guss Aussagen besorgt sind einfach eine Methode erstellen, um es an einem Ort für Sie tun:

private ActionTreeNode GetParent(ActionTreeNode node)
{
    return node.Parent as ActionTreeNode;
}

// in some method:
ActionTreeNode parent = GetParent(someNode);
if (parent != null)
{
    // the parent is an ActionTreeNode
}

Vergessen Sie nicht, die NULL-Prüfung auf dem Rückgabewert allerdings sollten die Eltern kein ActionTreeNode sein ...

Andere Tipps

Ich denke, die Frage ist, wie lange wird es dauern, die Mühe, es zu nehmen stark typisierte zu machen.

, um die Kosten für die Herstellung everythign „tight“ Wägen Sie mit den Kosten für Sie und andere Entwickler eine solide Plattform, die mit zu arbeiten.

Ohne mehr zu wissen, ich glaube, ich persönlich würde es stark geben, wie es auch bedeuten, dass Änderungen an Ihre Geschäftslogik wie verschiedene Arten im Baum gespeichert in einem Kompilierung Ausfall führen anstatt möglich unbekannte Fehler.

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