Observerパターンまたはデータバインディング
-
13-09-2019 - |
質問
私の質問は、あなたがObserverパターンを実装するか、次の操作を実行するためにデータバインディングを使用し、次のとおりです。
現時点では、私はGuiDataObjのリストを初期化しています。イベントがトリガされると、私はGuiDataObjByIdを検索してからGuiElementにデータバインドされたオブジェクトを修正します。これはGUIを更新します。
いくつかのGuiElementsは(現時点では、同じタイプのすべてのですが、これは将来変更される可能性)があり、私はクラスのオブジェクトを変更できるようにしたい、とにGuiElementを持っている自動魔法でGuiElementを更新反映変更。
public class GuiElement : ObservableImpl
{
private string guiElementName;
public String GuiElementName
{
get { return guiElementName; }
set
{
guiElementName = value;
NotifyObservers(guiElementName);
}
}
private string status;
public String Status
{
get { return status; }
set
{
status = value;
NotifyObservers(status);
}
}
}
public interface IObserver
{
void Notify<T>(T watchObj);
}
public interface IObservable
{
void Register(IObserver observer);
void UnRegister(IObserver observer);
}
public class ObservableImpl : IObservable
{
protected Hashtable _observerContainer = new Hashtable();
public void Register(IObserver anObserver)
{
_observerContainer.Add(anObserver, anObserver);
}
public void UnRegister(IObserver anObserver)
{
_observerContainer.Remove(anObserver);
}
public void NotifyObservers<T>(T anObject)
{
foreach (IObserver anObserver in _observerContainer.Keys)
anObserver.Notify(anObject);
}
}
と変化の通知を受けたときに、その後、私のGuiElementは、GUIを更新している?
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
それは私が結合、代わりの変化の観察者に通知するデータを実装する場合は、より柔軟な設計でしょうか?私は私が本当に求めていることは常にリアルタイムで最新情報を持っていることを、視覚的にビジネスオブジェクトを表現する最も柔軟な方法何、あると思います。
解決
私はオブザーバーを使用すると思います。彼らは変化を表す基礎となるモデル/データは、オブザーバーパターンを使用しての典型的な例の一つである場合にその値を自動更新のGUI。
他のヒント
、私たちはあなたのようにオブザーバーとのEventListenerパターンを思い付いした。私は、これらのパターンは、パブリッシュ/サブスクライブパターンと同じ概念であると考えています。私たちは、オブジェクト間の疎結合をすると、イベントのための機能をより拡張性を作るためのEventListener(eventObject)が道を選択しました。
のEventListenerの利点は、私たちがイベントの要件に基づいたEventListenerに(?)より合理的なイベント機能を追加できるということです。それは間違った方向になった場合、私を修正してください。
私はそれが役に立てば幸います。
タイガーます。