Aus Das deutschsprachige Scratch-Wiki

Model View Controller ist ein Muster zur Unterteilung einer Software in separate Komponenten namens Datenmodell (engl. model), Präsentation (engl. view) und Programmsteuerung (engl. controller).

Sinn dahinter ist die Programmlogik von der Darstellung und dem Eingabemodell zu trennen, sodass das Programm leicht angepasst und auf andere Architekturen portiert werden kann.

Ein Model View Controller-Ansatz in Scratch erfordert einiges an Mehrarbeit, dafür ist das Programm dann aber leichter auf andere Architekturen portierbar.

Datenmodell und Präsentation

Normalerweise sind in Scratch die Darstellung und das Datenmodell miteinander verwoben. So wird zum Beispiel die Position einer Figur normalerweise in
(x-Position
und
(y-Position)
gespeichert.

Das ist aber gleichzeitig der Speicher für die tatsächliche Position der Figur. Dies ist zumeist kein Problem. wenn aber eine Figur am Rand bewegt wird, kann es sein dass

ändere x um (10)
die Variable
(x-Position
nicht verändert (abhängig davon ob die Figur schon im Rand ist). Werden Datenmodell und Präsentation hingegen getrennt, wäre die Position der Figur im Datenmodell eine Variable
(xpos)
und der Befehl
ändere [xpos v] um (10)
würde die Variable immer verändern. Erst wenn die Figur dann auf die entsprechende Position gesetzt wird,
setze x auf (xpos)
werden Aspekte wie der Bühnenrand berücksichtigt.

Dazu müssten Informationen zu Hindernissen ebenfalls in separaten Daten gespeichert werden. Das ist insgesamt mühsam, erlaub aber das Umsetzen einen Scratch-Spiels auf einer anderen Plattform.

Programmsteuerung

Auch bei der Trennung der Programmsteuerung ist etwas Mehrarbeit nötig. So sollten Blöcke zur Eingabe nicht mehr direkt mit der Programmlogik vermischt werden.

Beispiel zur Umsetzung eines Model View Controller-Ansatzes

Wir nehmen als Ausgangsprogramm die klassische Steuerung einer Figur:

Wenn Taste [beliebiges v] gedrückt wird
falls <Taste (Pfeil nach oben v) gedrückt>, dann
ändere y um (5)
ende
falls <Taste (Pfeil nach unten v) gedrückt>, dann
ändere y um (-5)
ende
falls <Taste (Pfeil nach rechts v) gedrückt>, dann
ändere x um (5)
ende
falls <Taste (Pfeil nach links v) gedrückt>, dann
ändere x um (-5)
ende

wie folgt umzuschreiben:

Datenmodell

Wenn ich [update v] empfange
falls <(nach oben)=(1)>, dann
ändere [ypos v] um (5)
ende
falls <(nach unten)=(1)>, dann
ändere [ypos v] um (-5)
ende
falls <(nach rechts)=(1)>, dann
ändere [xpos v] um (5)
ende
falls <(nach links)=(1)>, dann
ändere [xpos v] um (-5)
ende

Präsentation

Wenn ich [draw v] empfange
setze x auf (xpos)
setze y auf (ypos)
ende

Programmsteuerung

Wenn ich [control v] empfange
setze [nach oben v] auf (0)
setze [nach unten v] auf (0)
setze [nach links v] auf (0)
setze [nach rechts v] auf (0)
falls <Taste (Pfeil nach oben v) gedrückt>, dann
setze [nach oben v] auf (1)
ende
falls <Taste (Pfeil nach unten v) gedrückt>, dann
setze [nach unten v] auf (1)
ende
falls <Taste (Pfeil nach rechts v) gedrückt>, dann
setze [nach links v] auf (1)
ende
falls <Taste (Pfeil nach links v) gedrückt>, dann
setze [nach rechts v] auf (1)
ende
ende

Die Zusammensetzung aller drei Teile ist recht einfach:

wiederhole fortlaufend
sende (control v) an alle und warte
sende (update v) an alle und warte
sende (draw v) an alle und warte
ende


Vorteile des Model View Controller-Ansatzes

Der große Vorteil ist dass eine Änderung der Eingabemethode (zum Beispiel andere Tasten oder Steuerung durch Maus) nur den Teil Programmsteuerung betrifft. Gleiches gilt bei der Änderung der Präsentation. Außerdem können größere Projekte so leicht in die einzelnen Teile aufgeteilt und von verschiedenen Scratcherinnen und Scratchern bearbeitet werden.