SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
A Pattern Language
PRESENTED BY
Joerg Reichert
Licensed under cc-by v3.0 (any
jurisdiction)
Patterns for Javascript
https://en.wikipedia.org/wiki/A_Pattern_Language
Christopher Alexander
Pattern Language
„[…] each pattern represents our current
best guess as to what arrangement of
the physical environment will work to
solve the problem presented. The
empirical questions center on the
problem - does it occur and is it felt in the
way we describe it? - and the solution -
does the arrangement we propose solve
the problem? And the asterisks represent
our degree of faith in these hypotheses.
But of course, no matter what the
asterisks say, the patterns are still
hypotheses, all 253 of them - and are,
therefore, all tentative, all free to evolve
under the impact of new experience
and observation.“
1977
Pattern Mining
Pattern Language (Definition)
● ein Muster (Pattern) beschreibt eine häufige Problemsituation und
zeigt auf, wie diese aufgelöst werden kann
● allgemeingültige Muster sind in der Praxis erprobt und von
Experten hinsichtlich Eleganz und Zweckmäßigkeit untersucht
● Musterbeschreibung sind bewusst allgemein und abstrakt
gehalten, so sie sich an die eigenen Präferenzen und der
tatsächlichen Problemsituation anpassen lassen
● Schaubildern und Diagrammen in Musterbeschreibungen helfen
diese leichter zu verstehen
● Querverweise zwischen Mustern (Alternativen, Anti-Muster,
komplementärer Einsatz) formen eine Netz und damit eine
Mustersprache (pattern language)
https://en.wikipedia.org/wiki/A_Pattern_Language
https://en.wikipedia.org/wiki/Design_Patterns
1994
The Gang of Four

Erich Gamma

Richard Helm

Ralph Johnson

John Vlissides
Software design pattern
Entwurfsmuster (Buch)
Entwurfsmuster
Beschreibungs-Struktur
● Name und Klassifikation: Bezeichnung, Kategorie: Erzeugung / Struktur / Verhalten
● Motivation: (Hinter-)Gründe für den Einsatz, Problemstellung
● Zweck: Beschreibung des zu erreichenden Zielzustandes
● Synonyme: Andere bekannte Namen
● Anwendbarkeit: Einsatzbereiche
● Struktur: Beschreibung der allgemeinen Struktur
● Beteiligte Akteure: Elemente, die an dem Muster beteiligt sind.
● Zusammenspiel: der beteiligten Elemente
● Konsequenzen: Vor- und Nachteile
● Implementierung: Praxisrelevante Tipps, Tricks und Techniken sowie Warnung vor
Fehlern, die leicht passieren können.
● Beispielcode: Quellcodefragment, das den Einsatz des Musters zeigt.
● Praxiseinsatz: Wo wird das Muster bereits eingesetzt?
● Querverweise: Wie spielt das Muster mit anderen Mustern zusammen?
Entwurfsmuster (Buch)
Observer (Beobachter)
Zweck
1-n Änderungen weitergeben, also Änderungen die an einer Stelle
vorgenommen worden sind, an weitere betroffene Stellen weitergeben und
umsetzen lassen.
Anwendbarkeit

bei einer Menge interagierender Klassen muss häufig die Konsistenz der
in Beziehung stehenden Objekte gewahrt werden, dies mittels enger
Kopplung umzusetzen, würde die Klassenwiederverwendbarkeit
einschränken

eine Abstraktion besitzt zwei Aspekte, wobei ein Aspekt von dem
anderen abhängt, diese Aspekte aber in einzelne Objekte gekapselt
werden sollen, um sie unabhängig voneinander zu ändern und wieder zu
verwenden

die Änderung eines Objekts verlangt die Änderung andere Objekte, ohne
zu wissen, wie viele betroffen sind

ein Objekt soll andere Objekte benachrichtigten, ohne zu wissen welche
Entwurfsmuster (Buch)
Observer (Beobachter)
Beschreibung
Die Schnittstelle Subjekt hat konkrete Methoden zum An- und Abmelden der
Beobachter-Schnittstelle, sowie eine konkrete Methode, mit der die abstrakte
Aktualisiere-Methode der Beobachter gerufen wird. KonkretesSubjekt, das
Subjekt erbt, speichert seinen Zustand und benachrichtigt seine Beobachter,
wenn sich dieser ändert. Ein KonkreterBeobachter verwaltet die Referenz auf
ein KonkretesSubjekt und speichert den Zustand, der mit dem Subjekt
übereinstimmen soll und implementiert die Aktualisiere-Methode von
Beobachter, in der der KonkreterBeobachter den Zustand von
KonkretesSubjekt holt. KonkreterBeobachter setzt den Zustand von
KonkretesSubjekt. Wenn dieses seinen Zustand ändert, ruft es die Aktualisiere-
Methode von KonkreterBeobachter, der dann den neuen Zustand von
KonkretesSubjekt holt.
Entwurfsmuster (Buch)
Observer (Beobachter)
Vorteile

Subjekte und Beobachter lassen sich unabhängig vom jeweils anderen
variieren und wieder verwenden

neue Beobachter lassen sich ohne Änderungen anderer Beobachter oder
des betreffenden Subjekts hinzufügen

Subjekt- und Beobachterklassen können zu unterschiedlichen
Abstraktionsebenen des Systems gehören, wobei ein Subjekt einer tiefer
liegenden Schicht einen Beobachter einer höher liegenden Schicht
benachrichtigen kann

Umsetzung einer Broadcast-Kommunikation, da bei der
Nachrichtenversendung die Empfänger nicht angegeben werden müssen
Entwurfsmuster (Buch)
Nachteile

da Beobachter nichts voneinander wissen, kann ein einzelner Beobachter
nicht die Kosten einschätzen, die die Änderung eines Subjekts bei den
Beobachtern und den mit ihnen verbundenen Objekten verursachen

schlecht definierte oder gewartete Abhängigkeiten können zu unsinnigen
Änderungen führen und sind schwer aufzuspüren; nur über ein erweitertes
Protokoll können die konkreten Änderungen erfasst werden
Observer (Beobachter)
Zusammenhänge mit den anderen Mustern

für die Kapselung komplexer Aktualisierungsmechanismen kann das
Vermittlermuster in Form eines Änderungsmanagers für die Verwaltung
zwischen Subjekten und Beobachtern verwendet werden

der Änderungsmanager sollte als Singleton implementiert werden, um genau
einmalig und global zugreifbar zu sein
Entwurfsmuster (Buch)
Anwendungsbeispiele

Umsetzung des Model-View-Conroller-Ansatzes (MVC)
Strategie
Zweck
Es sollen Familien von Algorithmen definiert werden, wobei jeder einzelne
gekapselt und austauschbar sein soll, damit die Algorithmen unabhängig vom
nutzenden Klient variiert werden können.
Anwendbarkeit

es soll vermieden werden, viele Klassen zu haben, die sich nur
hinsichtlich ihres Verhaltens unterscheiden, anstatt nur eine Klasse zu
haben, die mit einem bestimmten Verhalten konfiguriert wird

es sollen unterschiedliche Varianten eines Algorithmus in einer
eigenständigen Klassenhierarchie angelegt werden, die alle ihre Vor-
und Nachteile haben (Performanz, Speicherbedarf)

um algorithmenspezifische Datenstrukturen dem Klienten nicht offen
legen zu müssen

unterschiedliche Verhaltensweisen als zusammenhängende Zweige von
Bedingungsanweisungen in eigene Klassen verlagern
Entwurfsmuster (Buch)
Strategie
Beschreibung
Strategie ist die Schnittstelle die alle KonkreteStrategie-Klassen
implementieren und damit auch deren Methoden, die die jeweilige Variante des
Algorithmus umsetzt. Kontext kann nun entweder alle benötigten Daten
bereitstellen oder sich der Strategiemethode selbst übergeben, damit diese
dann die Daten abruft. Ein Klient erzeugt eine KonkreteStrategie und übergibt
sie dem Kontext. Anfragen sendet der Klient an den Kontext, der diese an die
KonkreteStrategie weiterleitet.
Entwurfsmuster (Buch)
Strategie
Vorteile

Aufbau von Hierarchieklassen zum Definieren von Familien verwandter
Algorithmen

Alternative zur Vererbung mit dem Vorteil, Algorithmen getrennt von ihrem
Kontext zu definieren, dadurch werden sie leichter änderbar und
verständlicher

Vermeiden von Bedienungsanweisungen, die nötig gewesen wären, um aus
den Algorithmen in einer Klasse den richtigen auszuwählen

Auswahlmöglichkeit zwischen Algorithmen, die die gleiche Funktionalität
bieten, sich aber im Zeit- und Speicherverhalten unterscheiden
Entwurfsmuster (Buch)
Anwendungsbeispiele

Gültigkeitsprüfung bei Dialogeingaben

Validator-Objekte als Strategieobjekte werden an ein Eingabefeld
gebunden

bei erfolgter Eingabe wird durch die Objekte z.B. geprüft, ob der
eingegebene Wert in einem bestimmten Zahlenbereich liegt
Strategie
Entwurfsmuster (Buch)
Nachteile

dem Klienten müssen die Unterschiede zwischen den Strategieobjekten
bekannt sein, um den richtigen für ihre jeweilige Situation auswählen zu
können

der Kontext erzeugt möglicherweise mehr Parameter als gebraucht werden,
weil einige konkrete Strategien auf Grund ihrer Implementierung diese nicht
brauchen werden, aber durch die Schnittstelle trotzdem übergeben
bekommen müssen

das Muster erhöht die Anzahl der Objekte in der Anwendung
Zusammenhänge mit den anderen Mustern

Strategieobjekte lassen sich vorzugsweise als Fliegengewichte
implementieren
Command (Befehl)
Zweck
Ein Befehl wird als Objekt angelegt und kann so parametrisiert werden. Befehle
können so leichter rückgängig und wiederholt werden und eignen sich vor
allem für Menüs. Es wird die Anbindung einer Operation an den Empfänger
dieser Operation verwaltet.
Anwendbarkeit

Auftrag, der aus mehreren Befehlen besteht, zu unterschiedlichen
Zeitpunkten ausführen

Befehle können aus mehreren Unterbefehlen und deren Reihenfolge
erstellt werden

Mitprotokollieren der Befehlsfolgen

Undo-Funktionalität
Entwurfsmuster (Buch)
Command (Befehl)
Beschreibung
Es wird eine abstrakte Klasse Befehl definiert die eine abstrakte Operation
zum anstoßen des Befehls definiert. Diese Methode wird von KonkreterBefehl
implementiert der seine eigenen Funktionalitäten implementiert und seine
Methoden aufruft, mit denen er Methode(n) einer Klasse Empfänger aufruft.
Der KonkreteBefehl selbst wird durch entsprechende Listener-Methoden über
Befehl instanziiert, die sich in der Klasse Aufrufer befinden. Die Listener
werden im Klienten gesetzt und auf Aufrufer verwiesen.
Entwurfsmuster (Buch)
Vorteile

das Anfrage auslösende Objekt muss nichts über die konkrete Umsetzung
des Befehls wissen

Befehlsobjekte können wie andere Objekte leicht geändert und erweitert
werden

ein Befehlsobjekt kann aus anderen Befehlsobjekten zusammen gesetzt
werden

neue Befehlsobjekte können leicht hinzugefügt werden, da keine bereits
bestehenden Klassen geändert werden müssen
Command (Befehl)
Entwurfsmuster (Buch)
Nachteile

wenn ein Befehlobjekt kaum Funktionalität implementiert, ist es kaum mehr
eine Verbindung zwischen Empfänger und den Methoden, die die Anfrage
ausführen

wenn ein Befehlsobjekt alle Funktionalität selbst implementiert, werden dem
Empfänger Funktionalität genommen, die in diesem sinnvoller aufgehoben
gewesen wären

um eine mehrstufige Undo/Redo-Funktionalität zu ermöglichen, müssen
neben den einzelnen Befehlsobjekten auch alle Änderungen beim
Empfänger in eine Befehlsliste kopiert werden; je mehr Stufen erlaubt sind,
desto umfangreicher wird die Liste

es kann zu einer Fehlerhäufung kommen, wenn fehlerhafte Befehlsobjekte
im Unde/Redo-Prozess wiederholt ausgeführt und rückgängig gemacht
werden (darum zusätzlich im Befehlsobjekt Zustandsinformationen
speichern, an Hand derer man das Erreichen des Originalzustands prüfen
kann)
Command (Befehl)
Entwurfsmuster (Buch)
Zusammenhänge mit den anderen Mustern

mit Hilfe eines Kompositums können Makrobefehle implementiert werden

zum Speichern von Zustandsinformationen, die zum Neutralisieren eines
Befehls benötigt werden, kann das Mementomuster Verwendung finden

Befehlsobjekte, die kopiert werden müssen, bevor sie in die
Befehlsgeschichte eingefügt werden können (weil man die Aufrufe des
gleichen Befehls unterscheiden möchte, weil sich dessen Zustand ändern
kann), verhalten sich wie Prototypen
Anwendungsbeispiele

Menü und seine Menüeinträge

Schicken eines Befehls an Objekte, die den Befehl unterschiedlich
interpretieren
Erbauer
Adapter
Vermittler
Fassade
Decorator
Weitere Muster
Entwurfsmuster (Buch)
Mustersprache
https://www.enterpriseintegrationpatterns.com/
Pattern-Oriented Software
Architecture (POSA) Vol.
1 - 5
http://xunitpatterns.com/
Refactoring to Patterns
Tactical U
I Design
Patterns
UI Patterns
Mobile
Design
Patterns
Kommunikationsmuster
Enterprise Application Integration - Erfahrungen aus
der Praxis
Synchron 1:1 Zweiweg
Synchron 1:1 Einweg
Synchron 1:1 Polling
Asynchron 1:n Broadcast
Asynchron m:n Publish-Subscripe
Asynchron 1:1 Einweg
ohne Bestätigung
https://addyosmani.com/resources/essentialjsdesignpatterns/book/
2017
JavaScript Design Patterns

Constructor Pattern

Module Pattern

Revealing Module Pattern

Singleton Pattern

Observer Pattern

Mediator Pattern

Prototype Pattern

Command Pattern

Facade Pattern

Factory Pattern

Mixin Pattern

Decorator Pattern

Flyweight Pattern
JavaScript MV* Patterns

MVC Pattern

MVP Pattern

MVVM Pattern
Functional Design Patterns
Closure
Currying
Function composition
MonadGenerator
Map-Reduce
Functor
Patterns in functional programming
Javascript: map, reduce, filter
MapReduce Design Patterns
Higher-order function
Yet Another Monad Tutorial in 15 Minutes
Map-reduce patterns
Pattern matching
MV* Patterns
Ember.js
backbone.js
knockout.js
angular.js
meteor.comModel view controller (MVC)
Model-View-ViewModel (MVVM)
vue.js
react.js aurelia.io
polymer
Quelle: Accessors vs Dirty-checking in Javascript Frameworks
Data binding
One-Way-Data-Binding
Two-Way-Data-Binding
How To Do Data Binding in Pure JavaScript
Two-Way Data Binding with Backbone, React, Angular, Meteor
and vanilla JavaScript in comparison
modelview.js
Accessors vs Dirty-checking
in Javascript Frameworks
maria.js
Data binding
Change And Its Detection In JavaScript Frameworks
Explizites 1 zu 1 Binding,
Datenmodell muss von
Framework erben,
z.B. Ember.js, Backbone
Dirty Checking (alles wird getrackt,
dafür Modell unabhängig von
Framework), z.B. Angular.js
Kein Binding, sondern jede Änderung
erzeugt einen neuen virtuellen DOM,
der gegen den Vorgänger gedifft wird
und nur dieses Diff wird auf den
eigentlich DOM angewendet, z.B. React
Chatbot Patterns
Chatbot Architecture
Chatbot Design
Patterns

Más contenido relacionado

Similar a A Pattern Language - Patterns for Javascript

130605 blog - drools
130605   blog - drools130605   blog - drools
130605 blog - drools
java-pe
 
Rough Set Theory (Grobe Logik)
Rough Set Theory (Grobe Logik)Rough Set Theory (Grobe Logik)
Rough Set Theory (Grobe Logik)
E P
 
TYPO3 5.0 - Der aktuelle Stand der Zukunft
TYPO3 5.0 - Der aktuelle Stand der ZukunftTYPO3 5.0 - Der aktuelle Stand der Zukunft
TYPO3 5.0 - Der aktuelle Stand der Zukunft
Jochen Rau
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
gueste4be40
 
Master thesis pascal_mueller05
Master thesis pascal_mueller05Master thesis pascal_mueller05
Master thesis pascal_mueller05
guest39ce4e
 

Similar a A Pattern Language - Patterns for Javascript (14)

Multi agenten-systeme
Multi agenten-systemeMulti agenten-systeme
Multi agenten-systeme
 
Advanced Refactoring Patterns
Advanced Refactoring PatternsAdvanced Refactoring Patterns
Advanced Refactoring Patterns
 
Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018Advanced Refactoring Patterns - Dev Day 2018
Advanced Refactoring Patterns - Dev Day 2018
 
130605 blog - drools
130605   blog - drools130605   blog - drools
130605 blog - drools
 
Ecm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forgeEcm 5 13_djaafar_jas_forge
Ecm 5 13_djaafar_jas_forge
 
Praxisorientierte Nutzung von Prototypen in JavaScript am Beispiel von jQuery
Praxisorientierte Nutzung von Prototypen in JavaScript am Beispiel von jQueryPraxisorientierte Nutzung von Prototypen in JavaScript am Beispiel von jQuery
Praxisorientierte Nutzung von Prototypen in JavaScript am Beispiel von jQuery
 
Bkr Workflow Oeffentlich
Bkr Workflow OeffentlichBkr Workflow Oeffentlich
Bkr Workflow Oeffentlich
 
Modularisierung - was soll das?
Modularisierung - was soll das?Modularisierung - was soll das?
Modularisierung - was soll das?
 
Rough Set Theory (Grobe Logik)
Rough Set Theory (Grobe Logik)Rough Set Theory (Grobe Logik)
Rough Set Theory (Grobe Logik)
 
TYPO3 5.0 - Der aktuelle Stand der Zukunft
TYPO3 5.0 - Der aktuelle Stand der ZukunftTYPO3 5.0 - Der aktuelle Stand der Zukunft
TYPO3 5.0 - Der aktuelle Stand der Zukunft
 
2009 03 17 Spring101
2009 03 17 Spring1012009 03 17 Spring101
2009 03 17 Spring101
 
Szenarien userstories usecases
Szenarien userstories usecasesSzenarien userstories usecases
Szenarien userstories usecases
 
Agiles Testen - Überblick
Agiles Testen - ÜberblickAgiles Testen - Überblick
Agiles Testen - Überblick
 
Master thesis pascal_mueller05
Master thesis pascal_mueller05Master thesis pascal_mueller05
Master thesis pascal_mueller05
 

Más de joergreichert

Más de joergreichert (20)

OKLab Leipzig - 2023 Update
OKLab Leipzig - 2023 UpdateOKLab Leipzig - 2023 Update
OKLab Leipzig - 2023 Update
 
SDGs und wo sind die Daten?
SDGs und wo sind die Daten?SDGs und wo sind die Daten?
SDGs und wo sind die Daten?
 
Gieß a bit more the Bäume
Gieß a bit more the BäumeGieß a bit more the Bäume
Gieß a bit more the Bäume
 
OKLab Leipzig 2022
OKLab Leipzig 2022OKLab Leipzig 2022
OKLab Leipzig 2022
 
FAIRe Sensordaten
FAIRe SensordatenFAIRe Sensordaten
FAIRe Sensordaten
 
OKLab Leipzig 2021
OKLab Leipzig 2021OKLab Leipzig 2021
OKLab Leipzig 2021
 
Leipzig Giesst (Dezember 2020)
Leipzig Giesst (Dezember 2020)Leipzig Giesst (Dezember 2020)
Leipzig Giesst (Dezember 2020)
 
Road to mauAR
Road to mauARRoad to mauAR
Road to mauAR
 
OKLab Leipzig - Schwerpunkt Mobilität
OKLab Leipzig - Schwerpunkt MobilitätOKLab Leipzig - Schwerpunkt Mobilität
OKLab Leipzig - Schwerpunkt Mobilität
 
Die Stadt als Schule der Demokratie
Die Stadt als Schule der DemokratieDie Stadt als Schule der Demokratie
Die Stadt als Schule der Demokratie
 
OKLab Leipzig (2019 Update)
OKLab Leipzig (2019 Update)OKLab Leipzig (2019 Update)
OKLab Leipzig (2019 Update)
 
Unit testing mit Javascript
Unit testing mit JavascriptUnit testing mit Javascript
Unit testing mit Javascript
 
damals.in/leipzig
damals.in/leipzigdamals.in/leipzig
damals.in/leipzig
 
OkLab Leipzig (2018 Update)
OkLab Leipzig (2018 Update)OkLab Leipzig (2018 Update)
OkLab Leipzig (2018 Update)
 
Map technologies
Map technologiesMap technologies
Map technologies
 
OkLab Leipzig (state: 2017)
OkLab Leipzig (state: 2017)OkLab Leipzig (state: 2017)
OkLab Leipzig (state: 2017)
 
Mongo DB schema design patterns
Mongo DB schema design patternsMongo DB schema design patterns
Mongo DB schema design patterns
 
MOOCs
MOOCsMOOCs
MOOCs
 
Log4j2
Log4j2Log4j2
Log4j2
 
Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"Using openArchitectureWare 4.0 in domain "registration"
Using openArchitectureWare 4.0 in domain "registration"
 

A Pattern Language - Patterns for Javascript

  • 1. A Pattern Language PRESENTED BY Joerg Reichert Licensed under cc-by v3.0 (any jurisdiction) Patterns for Javascript
  • 2. https://en.wikipedia.org/wiki/A_Pattern_Language Christopher Alexander Pattern Language „[…] each pattern represents our current best guess as to what arrangement of the physical environment will work to solve the problem presented. The empirical questions center on the problem - does it occur and is it felt in the way we describe it? - and the solution - does the arrangement we propose solve the problem? And the asterisks represent our degree of faith in these hypotheses. But of course, no matter what the asterisks say, the patterns are still hypotheses, all 253 of them - and are, therefore, all tentative, all free to evolve under the impact of new experience and observation.“ 1977 Pattern Mining
  • 3. Pattern Language (Definition) ● ein Muster (Pattern) beschreibt eine häufige Problemsituation und zeigt auf, wie diese aufgelöst werden kann ● allgemeingültige Muster sind in der Praxis erprobt und von Experten hinsichtlich Eleganz und Zweckmäßigkeit untersucht ● Musterbeschreibung sind bewusst allgemein und abstrakt gehalten, so sie sich an die eigenen Präferenzen und der tatsächlichen Problemsituation anpassen lassen ● Schaubildern und Diagrammen in Musterbeschreibungen helfen diese leichter zu verstehen ● Querverweise zwischen Mustern (Alternativen, Anti-Muster, komplementärer Einsatz) formen eine Netz und damit eine Mustersprache (pattern language) https://en.wikipedia.org/wiki/A_Pattern_Language
  • 4. https://en.wikipedia.org/wiki/Design_Patterns 1994 The Gang of Four  Erich Gamma  Richard Helm  Ralph Johnson  John Vlissides Software design pattern Entwurfsmuster (Buch) Entwurfsmuster
  • 5. Beschreibungs-Struktur ● Name und Klassifikation: Bezeichnung, Kategorie: Erzeugung / Struktur / Verhalten ● Motivation: (Hinter-)Gründe für den Einsatz, Problemstellung ● Zweck: Beschreibung des zu erreichenden Zielzustandes ● Synonyme: Andere bekannte Namen ● Anwendbarkeit: Einsatzbereiche ● Struktur: Beschreibung der allgemeinen Struktur ● Beteiligte Akteure: Elemente, die an dem Muster beteiligt sind. ● Zusammenspiel: der beteiligten Elemente ● Konsequenzen: Vor- und Nachteile ● Implementierung: Praxisrelevante Tipps, Tricks und Techniken sowie Warnung vor Fehlern, die leicht passieren können. ● Beispielcode: Quellcodefragment, das den Einsatz des Musters zeigt. ● Praxiseinsatz: Wo wird das Muster bereits eingesetzt? ● Querverweise: Wie spielt das Muster mit anderen Mustern zusammen? Entwurfsmuster (Buch)
  • 6. Observer (Beobachter) Zweck 1-n Änderungen weitergeben, also Änderungen die an einer Stelle vorgenommen worden sind, an weitere betroffene Stellen weitergeben und umsetzen lassen. Anwendbarkeit  bei einer Menge interagierender Klassen muss häufig die Konsistenz der in Beziehung stehenden Objekte gewahrt werden, dies mittels enger Kopplung umzusetzen, würde die Klassenwiederverwendbarkeit einschränken  eine Abstraktion besitzt zwei Aspekte, wobei ein Aspekt von dem anderen abhängt, diese Aspekte aber in einzelne Objekte gekapselt werden sollen, um sie unabhängig voneinander zu ändern und wieder zu verwenden  die Änderung eines Objekts verlangt die Änderung andere Objekte, ohne zu wissen, wie viele betroffen sind  ein Objekt soll andere Objekte benachrichtigten, ohne zu wissen welche Entwurfsmuster (Buch)
  • 7. Observer (Beobachter) Beschreibung Die Schnittstelle Subjekt hat konkrete Methoden zum An- und Abmelden der Beobachter-Schnittstelle, sowie eine konkrete Methode, mit der die abstrakte Aktualisiere-Methode der Beobachter gerufen wird. KonkretesSubjekt, das Subjekt erbt, speichert seinen Zustand und benachrichtigt seine Beobachter, wenn sich dieser ändert. Ein KonkreterBeobachter verwaltet die Referenz auf ein KonkretesSubjekt und speichert den Zustand, der mit dem Subjekt übereinstimmen soll und implementiert die Aktualisiere-Methode von Beobachter, in der der KonkreterBeobachter den Zustand von KonkretesSubjekt holt. KonkreterBeobachter setzt den Zustand von KonkretesSubjekt. Wenn dieses seinen Zustand ändert, ruft es die Aktualisiere- Methode von KonkreterBeobachter, der dann den neuen Zustand von KonkretesSubjekt holt. Entwurfsmuster (Buch)
  • 8. Observer (Beobachter) Vorteile  Subjekte und Beobachter lassen sich unabhängig vom jeweils anderen variieren und wieder verwenden  neue Beobachter lassen sich ohne Änderungen anderer Beobachter oder des betreffenden Subjekts hinzufügen  Subjekt- und Beobachterklassen können zu unterschiedlichen Abstraktionsebenen des Systems gehören, wobei ein Subjekt einer tiefer liegenden Schicht einen Beobachter einer höher liegenden Schicht benachrichtigen kann  Umsetzung einer Broadcast-Kommunikation, da bei der Nachrichtenversendung die Empfänger nicht angegeben werden müssen Entwurfsmuster (Buch) Nachteile  da Beobachter nichts voneinander wissen, kann ein einzelner Beobachter nicht die Kosten einschätzen, die die Änderung eines Subjekts bei den Beobachtern und den mit ihnen verbundenen Objekten verursachen  schlecht definierte oder gewartete Abhängigkeiten können zu unsinnigen Änderungen führen und sind schwer aufzuspüren; nur über ein erweitertes Protokoll können die konkreten Änderungen erfasst werden
  • 9. Observer (Beobachter) Zusammenhänge mit den anderen Mustern  für die Kapselung komplexer Aktualisierungsmechanismen kann das Vermittlermuster in Form eines Änderungsmanagers für die Verwaltung zwischen Subjekten und Beobachtern verwendet werden  der Änderungsmanager sollte als Singleton implementiert werden, um genau einmalig und global zugreifbar zu sein Entwurfsmuster (Buch) Anwendungsbeispiele  Umsetzung des Model-View-Conroller-Ansatzes (MVC)
  • 10. Strategie Zweck Es sollen Familien von Algorithmen definiert werden, wobei jeder einzelne gekapselt und austauschbar sein soll, damit die Algorithmen unabhängig vom nutzenden Klient variiert werden können. Anwendbarkeit  es soll vermieden werden, viele Klassen zu haben, die sich nur hinsichtlich ihres Verhaltens unterscheiden, anstatt nur eine Klasse zu haben, die mit einem bestimmten Verhalten konfiguriert wird  es sollen unterschiedliche Varianten eines Algorithmus in einer eigenständigen Klassenhierarchie angelegt werden, die alle ihre Vor- und Nachteile haben (Performanz, Speicherbedarf)  um algorithmenspezifische Datenstrukturen dem Klienten nicht offen legen zu müssen  unterschiedliche Verhaltensweisen als zusammenhängende Zweige von Bedingungsanweisungen in eigene Klassen verlagern Entwurfsmuster (Buch)
  • 11. Strategie Beschreibung Strategie ist die Schnittstelle die alle KonkreteStrategie-Klassen implementieren und damit auch deren Methoden, die die jeweilige Variante des Algorithmus umsetzt. Kontext kann nun entweder alle benötigten Daten bereitstellen oder sich der Strategiemethode selbst übergeben, damit diese dann die Daten abruft. Ein Klient erzeugt eine KonkreteStrategie und übergibt sie dem Kontext. Anfragen sendet der Klient an den Kontext, der diese an die KonkreteStrategie weiterleitet. Entwurfsmuster (Buch)
  • 12. Strategie Vorteile  Aufbau von Hierarchieklassen zum Definieren von Familien verwandter Algorithmen  Alternative zur Vererbung mit dem Vorteil, Algorithmen getrennt von ihrem Kontext zu definieren, dadurch werden sie leichter änderbar und verständlicher  Vermeiden von Bedienungsanweisungen, die nötig gewesen wären, um aus den Algorithmen in einer Klasse den richtigen auszuwählen  Auswahlmöglichkeit zwischen Algorithmen, die die gleiche Funktionalität bieten, sich aber im Zeit- und Speicherverhalten unterscheiden Entwurfsmuster (Buch) Anwendungsbeispiele  Gültigkeitsprüfung bei Dialogeingaben  Validator-Objekte als Strategieobjekte werden an ein Eingabefeld gebunden  bei erfolgter Eingabe wird durch die Objekte z.B. geprüft, ob der eingegebene Wert in einem bestimmten Zahlenbereich liegt
  • 13. Strategie Entwurfsmuster (Buch) Nachteile  dem Klienten müssen die Unterschiede zwischen den Strategieobjekten bekannt sein, um den richtigen für ihre jeweilige Situation auswählen zu können  der Kontext erzeugt möglicherweise mehr Parameter als gebraucht werden, weil einige konkrete Strategien auf Grund ihrer Implementierung diese nicht brauchen werden, aber durch die Schnittstelle trotzdem übergeben bekommen müssen  das Muster erhöht die Anzahl der Objekte in der Anwendung Zusammenhänge mit den anderen Mustern  Strategieobjekte lassen sich vorzugsweise als Fliegengewichte implementieren
  • 14. Command (Befehl) Zweck Ein Befehl wird als Objekt angelegt und kann so parametrisiert werden. Befehle können so leichter rückgängig und wiederholt werden und eignen sich vor allem für Menüs. Es wird die Anbindung einer Operation an den Empfänger dieser Operation verwaltet. Anwendbarkeit  Auftrag, der aus mehreren Befehlen besteht, zu unterschiedlichen Zeitpunkten ausführen  Befehle können aus mehreren Unterbefehlen und deren Reihenfolge erstellt werden  Mitprotokollieren der Befehlsfolgen  Undo-Funktionalität Entwurfsmuster (Buch)
  • 15. Command (Befehl) Beschreibung Es wird eine abstrakte Klasse Befehl definiert die eine abstrakte Operation zum anstoßen des Befehls definiert. Diese Methode wird von KonkreterBefehl implementiert der seine eigenen Funktionalitäten implementiert und seine Methoden aufruft, mit denen er Methode(n) einer Klasse Empfänger aufruft. Der KonkreteBefehl selbst wird durch entsprechende Listener-Methoden über Befehl instanziiert, die sich in der Klasse Aufrufer befinden. Die Listener werden im Klienten gesetzt und auf Aufrufer verwiesen. Entwurfsmuster (Buch) Vorteile  das Anfrage auslösende Objekt muss nichts über die konkrete Umsetzung des Befehls wissen  Befehlsobjekte können wie andere Objekte leicht geändert und erweitert werden  ein Befehlsobjekt kann aus anderen Befehlsobjekten zusammen gesetzt werden  neue Befehlsobjekte können leicht hinzugefügt werden, da keine bereits bestehenden Klassen geändert werden müssen
  • 16. Command (Befehl) Entwurfsmuster (Buch) Nachteile  wenn ein Befehlobjekt kaum Funktionalität implementiert, ist es kaum mehr eine Verbindung zwischen Empfänger und den Methoden, die die Anfrage ausführen  wenn ein Befehlsobjekt alle Funktionalität selbst implementiert, werden dem Empfänger Funktionalität genommen, die in diesem sinnvoller aufgehoben gewesen wären  um eine mehrstufige Undo/Redo-Funktionalität zu ermöglichen, müssen neben den einzelnen Befehlsobjekten auch alle Änderungen beim Empfänger in eine Befehlsliste kopiert werden; je mehr Stufen erlaubt sind, desto umfangreicher wird die Liste  es kann zu einer Fehlerhäufung kommen, wenn fehlerhafte Befehlsobjekte im Unde/Redo-Prozess wiederholt ausgeführt und rückgängig gemacht werden (darum zusätzlich im Befehlsobjekt Zustandsinformationen speichern, an Hand derer man das Erreichen des Originalzustands prüfen kann)
  • 17. Command (Befehl) Entwurfsmuster (Buch) Zusammenhänge mit den anderen Mustern  mit Hilfe eines Kompositums können Makrobefehle implementiert werden  zum Speichern von Zustandsinformationen, die zum Neutralisieren eines Befehls benötigt werden, kann das Mementomuster Verwendung finden  Befehlsobjekte, die kopiert werden müssen, bevor sie in die Befehlsgeschichte eingefügt werden können (weil man die Aufrufe des gleichen Befehls unterscheiden möchte, weil sich dessen Zustand ändern kann), verhalten sich wie Prototypen Anwendungsbeispiele  Menü und seine Menüeinträge  Schicken eines Befehls an Objekte, die den Befehl unterschiedlich interpretieren
  • 20. https://www.enterpriseintegrationpatterns.com/ Pattern-Oriented Software Architecture (POSA) Vol. 1 - 5 http://xunitpatterns.com/ Refactoring to Patterns Tactical U I Design Patterns UI Patterns Mobile Design Patterns
  • 21. Kommunikationsmuster Enterprise Application Integration - Erfahrungen aus der Praxis Synchron 1:1 Zweiweg Synchron 1:1 Einweg Synchron 1:1 Polling Asynchron 1:n Broadcast Asynchron m:n Publish-Subscripe Asynchron 1:1 Einweg ohne Bestätigung
  • 22. https://addyosmani.com/resources/essentialjsdesignpatterns/book/ 2017 JavaScript Design Patterns  Constructor Pattern  Module Pattern  Revealing Module Pattern  Singleton Pattern  Observer Pattern  Mediator Pattern  Prototype Pattern  Command Pattern  Facade Pattern  Factory Pattern  Mixin Pattern  Decorator Pattern  Flyweight Pattern JavaScript MV* Patterns  MVC Pattern  MVP Pattern  MVVM Pattern
  • 23. Functional Design Patterns Closure Currying Function composition MonadGenerator Map-Reduce Functor Patterns in functional programming Javascript: map, reduce, filter MapReduce Design Patterns Higher-order function Yet Another Monad Tutorial in 15 Minutes Map-reduce patterns Pattern matching
  • 24. MV* Patterns Ember.js backbone.js knockout.js angular.js meteor.comModel view controller (MVC) Model-View-ViewModel (MVVM) vue.js react.js aurelia.io polymer Quelle: Accessors vs Dirty-checking in Javascript Frameworks
  • 25. Data binding One-Way-Data-Binding Two-Way-Data-Binding How To Do Data Binding in Pure JavaScript Two-Way Data Binding with Backbone, React, Angular, Meteor and vanilla JavaScript in comparison modelview.js Accessors vs Dirty-checking in Javascript Frameworks maria.js
  • 26. Data binding Change And Its Detection In JavaScript Frameworks Explizites 1 zu 1 Binding, Datenmodell muss von Framework erben, z.B. Ember.js, Backbone Dirty Checking (alles wird getrackt, dafür Modell unabhängig von Framework), z.B. Angular.js Kein Binding, sondern jede Änderung erzeugt einen neuen virtuellen DOM, der gegen den Vorgänger gedifft wird und nur dieses Diff wird auf den eigentlich DOM angewendet, z.B. React