12
© Logica 2008. All rights reserved Varianten des “Observer Pattern” Das Observer Pattern ist ein GoF Entwurfmuster um Änderungen an einem Objekt in abhängigen Ansichten zu aktualisieren. Das Pattern bietet eine Lösung zur Nachrichtenverteilung innerhalb einer Applikation für eine beliebige Anzahl an Empfängern. Dieser Vortrag stellt verschiedene Alternativen einer Observer Pattern Implementierung vor und zeigt die Vor- und Nachteile auf. Am Ende steht eine Observer-Komponente für eine Windows Forms Applikationen.

Varianten des "Observer Pattern"

Embed Size (px)

Citation preview

Page 1: Varianten des "Observer Pattern"

© Logica 2008. All rights reserved

Varianten des “Observer Pattern”

Das Observer Pattern ist ein GoF Entwurfmuster um Änderungen an einemObjekt in abhängigen Ansichten zu aktualisieren. Das Pattern bietet eine Lösung zur Nachrichtenverteilung innerhalb einer Applikation für eine beliebige Anzahl an Empfängern.

Dieser Vortrag stellt verschiedene Alternativen einer Observer Pattern Implementierung vor und zeigt die Vor- und Nachteile auf. Am Ende steht eine Observer-Komponente für eine Windows Forms Applikationen.

Page 2: Varianten des "Observer Pattern"

Agenda

• Observer Pattern nach GoF

– Einleitung

– Demo einer Implementierung

– Vorteile / Nachteile

• Event-Basierter Observer

– Einleitung

No. 223 April 2009 Varianten des “Observer Pattern”

– Einleitung

– Demo einer Implementierung

– Vorteile / Nachteile

• Observer-Komponente

– Einleitung

– Demo einer Implementierung

– Vorteile / Nachteile

Page 3: Varianten des "Observer Pattern"

Observer Pattern

• Subjekt = Beobachtetes Objekt

• Konkreter Beobachter = Konkrete Implementierung eines Beobachters

• Beobachter = Schnittstelle für alle Beobachter Implementierungen

• Beobachter.aktualisiere = Aktualisieren der konkreten Beobachter

• Subjekt.benachrichtige = Aufrufen der Aktualisierung aller registrierten Beobachter

No. 323 April 2009 Varianten des “Observer Pattern”

Page 4: Varianten des "Observer Pattern"

Observer Pattern (Demo)

• Demo

– Fachobjekt „PersonSubjekt“

– Schnittstelle „IBeobachter“

– Beobachter „DatumBeobachter“

– Beobachter „EigenschaftenBeobachter“– Beobachter „EigenschaftenBeobachter“

No. 423 April 2009 Varianten des “Observer Pattern”

Page 5: Varianten des "Observer Pattern"

Observer Pattern (Vorteile / Nachteile)

• Pro: Es funktioniert ☺

• Pro: Saubere Architektur

• Contra: Erweiterbarkeit: Viele Schnittstellen oder Methoden

– Attach / Detach für jede Schnittstelle im Subjekt– Attach / Detach für jede Schnittstelle im Subjekt

– Leerimplementierung für nicht benutzte Methoden

• Contra: Verwaltungscode im Fachobjekt

No. 523 April 2009 Varianten des “Observer Pattern”

Page 6: Varianten des "Observer Pattern"

Event Basierter Observer

• Subjekt mit Events

• Attach / Detach über Event und EventHandler

• EventHandler mit EventArgs als Schnittstelle

No. 623 April 2009 Varianten des “Observer Pattern”

Page 7: Varianten des "Observer Pattern"

Event Basierter Observer (Demo)

• Demo

– Fachobjekt „Subjekt“ + Schnittstelle „ISubjekt“

– EventArgs „SubjektEventArgs“ (statt „IBeobachter“)

– Beobachter „DatumBeobachter“

– Beobachter „EigenschaftenBeobachter“– Beobachter „EigenschaftenBeobachter“

No. 723 April 2009 Varianten des “Observer Pattern”

Page 8: Varianten des "Observer Pattern"

Event Basierter Observer (Vorteile / Nachteile)

• Pro: Es funktioniert ☺

• Pro: Einfache Erweiterbarkeit durch Events

• Pro/Contra: Kein Verwaltungscode im Fachobjekt

• Contra: Sehr viele EventHandler in großen Objektbäumen (Vater-Kind)

• Contra: Keine Visual Studio Unterstützung

• Contra: Auswahl eines Objektes nicht unterstützt

No. 823 April 2009 Varianten des “Observer Pattern”

Page 9: Varianten des "Observer Pattern"

Observer Komponente

• Anforderung

– Event Basierter Observer

– Windows Forms Komponente

• Lösung

– Observer Komponente, Subjekt als Assoziation– Observer Komponente, Subjekt als Assoziation

– Statische Liste mit allen Instanzen der Observer Komponente

– SubjektAktualisiert Event

– Statische RaiseSubjektAktualisiert Methode (Auslösen des Events aller Instanzen)

– Subjekt als Parameter der RaiseSubjektAktualisiert Methode

No. 923 April 2009 Varianten des “Observer Pattern”

Page 10: Varianten des "Observer Pattern"

Observer Komponente (Demo)

• Observer Komponente „SubjektObserver“

– Singleton Liste mit allen Instanzen

◦ New() erweitern

◦ Dispose() erweitern

– Event „SubjektAktualisiert“

– Statische Methode „RaiseSubjektAktualisiert“– Statische Methode „RaiseSubjektAktualisiert“

– Fachobjekt „Subjekt“ + Schnittstelle „ISubjekt“

– EventArgs „SubjektEventArgs“

– Beobachter „DatumBeobachter“

– Beobachter „EigenschaftenBeobachter“

No. 1023 April 2009 Varianten des “Observer Pattern”

Page 11: Varianten des "Observer Pattern"

Observer Komponente (Vorteile / Nachteile)

• Pro: Es funktioniert ☺

• Pro: Visual Studio Unterstützung

• Contra: Fachobjekt ist abhängig von Controller

– Pro: *Beobachter rufen die Raise* Methoden auf (Validierung etc.)– Pro: *Beobachter rufen die Raise* Methoden auf (Validierung etc.)

• Pro/Contra: Immer genau ein Subjekt im Fokus

No. 1123 April 2009 Varianten des “Observer Pattern”

Page 12: Varianten des "Observer Pattern"

Fragen

Es gibt keine dummen Fragen,

es gibt nur dumme Antworten!

E-Mail/MSN: [email protected]

Blog: http://thomas.mentzel.name

Twitter: http://twitter.com/ThomasMentzel

No. 1223 April 2009 Varianten des “Observer Pattern”