2009-07-14 5 views
2

Meine Frage ist, würden Sie das Beobachter-Muster implementieren, oder verwenden Sie die Datenbindung Folgendes zu tun:Observer Muster oder Databinding

Im Moment, ich bin eine Liste von GuiDataObj initialisiert. Wenn ein Ereignis ausgelöst wird, suche ich die GuiDataObjById nach und modifiziere dann das Objekt, das mit einem GuiElement verbunden ist; was die GUI aktualisiert.

Es gibt mehrere GuiElements (im Moment sind alle vom selben Typ, aber das könnte sich in der Zukunft ändern), ich möchte ein Klassenobjekt modifizieren und das GuiElement haben, um das GuiElement automatisch zu aktualisieren mit der reflektierten Veränderung.

Und dann muss mein GuiElement das Gui aktualisieren, wenn es über eine Änderung informiert wird?

public partial class GuiElementControl : UserControl, IObserver 
{ 

    public GuiElementControl() 
    { 
     InitializeComponent(); 
    } 

    #region Implementation of IObserver 

    public void Notify<T>(T watchObj) 
    { 
     if (watchObj is GuiElement) 
     { 
      UpdateGui(watchObj); 
     } 
    } 

    private static void UpdateGui(object obj) 
    { 
     GuiElement element = obj as GuiElement; 
     if (element != null) 
     { 
      NameLbl.Text = element.GuiElementName; 
      StatusLbl.Text = element.Status; 
     } 
    } 

    #endregion 

Wäre es ein flexibleres Design, wenn ich Datenbindung implementiert hätte, anstatt einen Beobachter über Änderungen zu informieren? Ich denke, was ich wirklich frage ist, was ist die flexibelste Möglichkeit, ein Business-Objekt visuell darzustellen, das ständig Updates in Echtzeit hat.

alt text http://devpupil.net/GuiConcept.PNG

Antwort

3

würde ich einen Observer verwenden. GUIs, die ihre Werte automatisch aktualisieren, wenn sich das zugrunde liegende Modell/die zugrunde liegenden Daten ändern, ist eines der klassischen Beispiele für die Verwendung des Observer-Musters.

1

Als ich unser Projekt entwickelte, kamen wir mit den Mustern Observer und EventListener wie Sie. Ich glaube, dass diese Muster das gleiche Konzept wie Publish/Subscribe-Muster sind. Wir haben den EventListener (EventObject) -Weg gewählt, um lose Verbindungen zwischen Objekten herzustellen und die Erweiterbarkeit von Funktionen für Ereignisse zu verbessern.

Der Vorteil des EventListener ist, dass wir dem EventListener basierend auf unseren Ereignisanforderungen weitere sinnvolle Ereignisfunktionen (?) Hinzufügen können. Bitte korrigieren Sie mich, wenn es in die falsche Richtung geht.

Ich hoffe es hilft.

Tiger.