Aufgabe 07 - Strategie und Kommando
Aufgabe 07 - Strategie und Kommando
Abschnitt betitelt „Aufgabe 07 - Strategie und Kommando“Worum geht es?
Abschnitt betitelt „Worum geht es?“Zwei Verhaltensmuster an je einem Szenario: austauschbare Preisregeln (Strategy) und ein Editor mit Undo/Redo (Command). Beide stecken Verhalten in Objekte, aber aus unterschiedlichem Grund - und die scharfe Abgrenzung ist genau die Kompetenz, die das Fachgespräch abfragt (siehe Kapitel Entwurfsmuster II).
Was Sie dafür brauchen
Abschnitt betitelt „Was Sie dafür brauchen“- Kapitel Entwurfsmuster II (Strategy, Command, Kernfragen-Tabelle).
- Ein TypeScript-Projekt mit Testrunner; die Stack-Datenstruktur aus der 2. Klasse.
- Das Steckbrief-Format der Muster-Sammlung.
Welche Kompetenzen Sie erwerben und zeigen
Abschnitt betitelt „Welche Kompetenzen Sie erwerben und zeigen“- Sie kapseln ein Verfahren als austauschbare Strategie und tauschen es zur Laufzeit aus.
- Sie verdinglichen Aktionen als Command-Objekte mit
execute/undound verwalten sie in einer Historie. - Sie grenzen Strategy und Command an ihrer Kernfrage voneinander ab.
Pädagogische Einordnung
Abschnitt betitelt „Pädagogische Einordnung“- Reproduktion: die beiden Muster nach dem Kapitel implementieren (Teile A und B).
- Reorganisation und Transfer: Verhalten zur Laufzeit tauschen und eine Undo-Historie aufbauen (Teile A und B).
- Reflexion, Problemlösung und Urteilsbildung: die Muster scharf abgrenzen und zu einem Makro-Kommando kombinieren (Teile C und D).
Arbeitsaufträge
Abschnitt betitelt „Arbeitsaufträge“Die Übung ist auf etwa zwei Stunden ausgelegt. Teil D ist der Expertenteil.
Teil A - Strategy: Ticketpreise
Abschnitt betitelt „Teil A - Strategy: Ticketpreise“Ein Kino berechnet Preise nach wechselnden Regeln: Normalpreis, Kinotag (alles 7 €), Gruppenrabatt (ab 5 Tickets -20 %), Schüleraktion (50 % mit Ausweis).
- Interface
PricingStrategy(calculate(order): number); die vier Regeln als Implementierungen; dieCheckoutbekommt die Strategie injiziert und kennt keine konkrete Regel. - Skizzieren Sie (nur skizzieren), wie die
Checkoutmitif/else-Ketten aussähe und was bei jeder neuen Aktion passiert - benennen Sie das verletzte SOLID-Prinzip. - Tests je Strategie plus ein Kassentest mit zur Laufzeit ausgetauschter Strategie (“ab 20:00 gilt Kinotag”).
Teil B - Command: Der Playlist-Editor
Abschnitt betitelt „Teil B - Command: Der Playlist-Editor“Ein Editor für die Schulradio-Playlist: Songs hinzufügen, entfernen, verschieben, mit unbegrenztem Undo/Redo.
- Interface
Command(execute(),undo()); drei Kommandos; eineHistorymit zwei Stacks (Undo/Redo - hier hat der Stack aus der 2. Klasse seinen großen Auftritt). - Regeln: Eine neue Aktion leert den Redo-Stack (mit begründendem Kommentar); das
undoeines Verschiebens stellt die exakte Vorher-Position wieder her. - Tests: eine Sequenz ausführen → zweimal undo → einmal redo → den Zustand exakt prüfen.
Teil C - Muster-Duell
Abschnitt betitelt „Teil C - Muster-Duell“Grenzen Sie beide Muster scharf ab (vier bis sechs Sätze): Was parametrisiert Strategy, was verdinglicht Command? Woran erkennen Sie in fremdem Code, welches von beiden vorliegt? Erstellen Sie die Steckbriefe “Strategy” und “Command” für die Muster-Sammlung.
Teil D - Expertenteil: Makro-Kommando und Zusammenspiel
Abschnitt betitelt „Teil D - Expertenteil: Makro-Kommando und Zusammenspiel“- Implementieren Sie ein Makro-Kommando (Composite): ein Kommando, das mehrere Kommandos bündelt und als einen Schritt ausführt und rückgängig macht (das
undonimmt die Teilaktionen in umgekehrter Reihenfolge zurück). Anwendungsfall: “Album einfügen” fügt zehn Songs auf einmal ein, und ein einziges Undo entfernt alle zehn. - Lassen Sie die beiden Muster zusammenspielen: Eine Preisänderung im Editor (Strategie wechseln) wird als undoable Command ausgeführt, sodass auch der Regelwechsel rückgängig gemacht werden kann. Zeigen Sie an einem Test, dass Undo den vorherigen Preis wiederherstellt.
- Beurteilen Sie in drei Sätzen: Warum ist das Makro-Kommando selbst wieder ein
Command(und kein Sonderfall in der Historie), und welches Prinzip guten Entwurfs zeigt sich daran?
Wissenscheck
Abschnitt betitelt „Wissenscheck“- Was ist die Kernfrage, die Strategy beantwortet, und was die, die Command beantwortet?
- Warum leert eine neue Aktion den Redo-Stack?
- Wieso muss beim Command jede Aktion wissen, wie sie sich selbst umkehrt, und nicht die Historie?
- Warum ist ein Makro-Kommando ebenfalls ein
Command- und welches Muster steckt in dieser Verschachtelung? - Wann lohnt sich eine Strategie als eigenes Interface gegenüber einer einfach übergebenen Funktion?
Git-Repository mit beiden Teilen, Tests, der Abgrenzung aus Teil C, dem Makro-Kommando und dem Muster-Zusammenspiel aus Teil D sowie den zwei Steckbriefen.