Übungsaufgaben zu Schichtenarchitektur, MVC und Data Binding

https://bildung.social/@oerinformatik/

https://oer-informatik.de/softwarearchitektur-uebungsaufgaben

Softwarearchitektur, Schichtenarchitektur, MVC, Data Binding, MVVM, Beobachter-Muster, Verteilungsdiagramm, JavaFX, Übungsaufgaben, Prüfungsvorbereitung

tl/dr; (ca. 45 min Lese- und Bearbeitungszeit): Eine Übungsaufgabe (Stufe 2 – Kernkompetenz): Die Software für ein Schul-Barcamp wird in Schichten gegliedert und auf Server verteilt, die Check-in-App folgt dem MVC-Muster, und ihre Bildschirmmaske wird per Data Binding angebunden. Alle Lösungen mit Punkteverteilung lassen sich einzeln einblenden [AI-Assisted]. (Zuletzt geändert am 27.10.2026)

Diese Übungsaufgabe gehört zum Artikel Softwarearchitektur: Schichten, MVC und Data Binding. Zur Artikelreihe gehören auch MVP und MVVM.

Hinweise zur Bearbeitung: Als FIA musst Du zur Teil-2-Prüfung Aufgaben auf Kernkompetenz-Ebene lösen können, das ist Aufgabe 2.1. Bearbeite jede Teilaufgabe zuerst schriftlich und ohne Hilfsmittel. Erst danach blendest Du die Lösung ein. Die Punkte zeigen Dir, wie ausführlich eine Antwort sein sollte.

Aufgabe 2.1: Die Architektur der Barcamp-Software (Kernkompetenz)

Das Ratz und Rübe Berufskolleg (RRB) in Bielefeld veranstaltet am Samstag, 13.03.2027, das Barcamp „Lernen.Digital.Leben 2027“ mit bis zu 400 Teilnehmenden. Ein Software-Team aus Schüler*innen entwickelt unter Leitung des Informatiklehrers Dimitrios Papadopoulos die Barcamp-Software. Zum Team gehören Mia Schröder (Auszubildende FIA), Hannah Klein (Schülerin FIA), Emre Aksoy (Auszubildender FISY) und Du.

Zur Barcamp-Software gehören:

  • die Barcamp-Web-App für Smartphones mit Sessionplan, Buchung begrenzter Plätze, „Meine Sessions“ und der Orga-Seite „Anmeldestand“,

  • die Check-in-App auf den beiden Check-in-Terminals (Tablets mit Badge-Drucker), geschrieben in Java mit JavaFX,

  • die Anzeige des Sessionplans auf den Infomonitoren im Foyer.

Alle Programme greifen über eine gemeinsame REST-API auf die MariaDB-Datenbank barcamp zu. Svenja Krämer von der Schul-IT OWL stellt dafür im Rechenzentrum zwei virtuelle Server bereit: den Anwendungsserver bc-app und den Datenbankserver bc-db.

a) Dimitrios bittet Dich, dem Team die geplante Drei-Schichten-Architektur zu erklären. Beschreibe die drei Schichten mit ihren Aufgaben und beschreibe am Beispiel „Eine Teilnehmerin ruft auf ihrem Smartphone die Sessions in Raum A.104 auf“, wie die Komponenten zusammenarbeiten. (6 Punkte)

Die drei Schichten (je 1 Punkt):

  • Präsentationsschicht: zeigt Daten an und nimmt Eingaben entgegen, hier die Barcamp-Web-App im Browser des Smartphones (Sessionplan, Buchungsformular).

  • Logikschicht (Fach- bzw. Anwendungslogik): setzt die Regeln des Barcamps um, prüft Anfragen und steuert die Abläufe, z. B. „höchstens eine Buchung je Slot und Person“ oder die Berechnung der freien Plätze. Sie läuft im Backend auf bc-app.

  • Datenhaltungsschicht: speichert, liest, ändert und löscht die Daten dauerhaft und kapselt den Zugriff auf die Datenbank barcamp (SQL-Befehle, Datenbankserver bc-db).

Zusammenwirken (3 Punkte für eine schlüssige Kette in beide Richtungen):

  1. Die Web-App schickt eine HTTPS-Anfrage an die REST-API auf bc-app, z. B. „Sessions in Raum A.104“.

  2. Das Backend prüft die Anfrage (gültiger Raum, nur angenommene und geplante Sessions) und beauftragt die Datenhaltungsschicht.

  3. Die Datenhaltungsschicht stellt eine SQL-Abfrage an die Datenbank auf bc-db (Sessions, Slots, Raum, Buchungen) und erhält die Datensätze zurück.

  4. Die Logikschicht bereitet das Ergebnis auf (z. B. nach Slot sortiert, freie Plätze berechnet) und sendet es als JSON an die Web-App.

  5. Die Web-App stellt die Sessions auf dem Smartphone dar.

Wichtig für volle Punktzahl: Die Präsentationsschicht greift nicht direkt auf die Datenbank zu, jede Schicht nutzt nur die darunterliegende.

b) Ordne die folgenden Bestandteile der Barcamp-Software jeweils einer Schicht zu und gib an, ob sie zum Frontend oder zum Backend gehören. Übertrage die Tabelle dazu auf Dein Blatt. (4 Punkte)

Bestandteile der Barcamp-Software
Nr. Bestandteil Schicht Frontend oder Backend
1 Seite „Meine Sessions“ mit der Liste der gebuchten Sessions
2 Regel „je Slot höchstens eine Buchung pro Person“
3 Klasse BuchungRepository mit den SQL-Befehlen für die Tabelle session_buchung
4 Stylesheet mit großer, kontrastreicher Schrift für die Infomonitore
5 Berechnung der freien Plätze einer Session
6 Prüfung, ob der Raum einer Session barrierefrei ist, wenn eine referierende Person Unterstützungsbedarf angegeben hat
7 Tabelle anmeldung mit dem Zeitpunkt des Check-ins
8 Eingabefeld für den Badge-Code in der Check-in-App
Lösung zur Zuordnung
Nr. Bestandteil Schicht Frontend oder Backend
1 Seite „Meine Sessions“ Präsentationsschicht Frontend
2 Regel „höchstens eine Buchung je Slot“ Logikschicht Backend
3 Klasse BuchungRepository Datenhaltungsschicht Backend
4 Stylesheet für die Infomonitore Präsentationsschicht Frontend
5 Berechnung der freien Plätze Logikschicht Backend
6 Barrierefreiheitsprüfung Logikschicht Backend
7 Tabelle anmeldung Datenhaltungsschicht Backend
8 Eingabefeld für den Badge-Code Präsentationsschicht Frontend

Je Zeile 0,5 Punkte, wenn Schicht und Frontend/Backend stimmen.

Hinweis zu Zeile 2 und 5: Auch wenn die Web-App die freien Plätze zusätzlich anzeigt oder eine Doppelbuchung schon im Formular verhindert, muss die Regel im Backend stehen. Nur dort gilt sie für alle Programme, und nur dort lässt sie sich nicht umgehen.

c) Hannah Klein schlägt vor: „Wir lassen die Schicht in der Mitte weg. Die Web-App schickt ihre SQL-Befehle einfach direkt an die Datenbank. Das ist schneller programmiert.“

ca) Erläutere zwei Gründe, die gegen Hannahs Vorschlag sprechen. (4 Punkte)

Je Grund 2 Punkte (Grund nennen und Folge erläutern), z. B.:

  • Sicherheit: Die Zugangsdaten der Datenbank müssten im JavaScript-Code der Web-App stehen und wären für alle lesbar. Jede Person könnte beliebige SQL-Befehle schicken, also z. B. fremde Anmeldungen lesen oder löschen. Außerdem müsste die Datenbank aus dem Internet bzw. dem Gäste-WLAN erreichbar sein, was die Schul-IT nicht zulassen wird.

  • Regeln nur an einer Stelle: Web-App, Check-in-App und Infomonitore bräuchten jeweils eine eigene Kopie der Regeln (Buchungsgrenzen, Barrierefreiheit). Weichen die Kopien voneinander ab, entstehen Fehler wie Überbuchungen, und jede Änderung muss dreimal programmiert werden.

  • Wartbarkeit und Austauschbarkeit: Ändert sich die Tabellenstruktur, müssen alle Programme angepasst werden. Mit Logikschicht bleibt die Schnittstelle (REST-API) gleich, und nur die Datenhaltungsschicht ändert sich.

  • Testbarkeit: Die Regeln lassen sich nicht unabhängig von Oberfläche und Datenbank testen.

cb) Nenne zwei Nachteile, die eine Schichtenarchitektur trotzdem mit sich bringt. (2 Punkte)

Je Nachteil 1 Punkt, z. B.:

  • mehr Programmieraufwand, weil Daten durch mehrere Schichten durchgereicht werden,

  • längere Antwortzeiten durch zusätzliche Aufrufe und Netzwerkverbindungen,

  • ein neues Datenfeld muss in allen Schichten nachgezogen werden,

  • für sehr kleine Programme unnötig komplex.

d) Svenja Krämer bittet um eine Übersicht, welche Software auf welchem Gerät läuft. Hannah meint dazu: „Drei Schichten heißt doch: drei Rechner.“

da) Erläutere den Unterschied zwischen einer Schicht (layer) und einer Ebene (tier) und gehe dabei auf Hannahs Aussage ein. (2 Punkte)

Eine Schicht ist eine logische Gliederung des Programmcodes nach Aufgaben (Präsentation, Logik, Datenhaltung). Eine Ebene (tier) beschreibt die physische Verteilung auf Rechner oder Prozesse (1 Punkt).

Hannahs Aussage stimmt deshalb nicht allgemein: Drei Schichten können auch auf einem einzigen Rechner laufen oder auf zwei (z. B. Programm mit Oberfläche und Logik plus Datenbankserver). Bei der Barcamp-Software sind es tatsächlich drei Ebenen: Smartphone bzw. Tablet, bc-app und bc-db (1 Punkt).

db) Ergänze das vorgegebene Verteilungsdiagramm. Trage in die Felder (1) bis (3) ein, welche Software dort läuft, und beschrifte die Verbindungen (4) und (5) mit der Art der Kommunikation. (5 Punkte)

Vorgabe: Verteilung der Barcamp-Software auf Smartphone, Check-in-Terminal, Anwendungsserver und Datenbankserver mit leeren Feldern (1) bis (5) (mit KI erstellt)
Lösung: Web-App im Browser, Webserver und Backend auf bc-app, MariaDB auf bc-db, HTTPS und SQL über TCP (mit KI erstellt)

Je Feld 1 Punkt:

    1. Barcamp-Web-App im Browser (HTML, CSS, JavaScript), also die Präsentationsschicht bzw. das Frontend.
  • (2) Webserver und Backend mit REST-API, Fachlogik und Datenzugriff (Logik- und Datenhaltungsschicht).

  • (3) MariaDB-Datenbankmanagementsystem mit der Datenbank barcamp.

  • (4) HTTPS-Anfragen an die REST-API, Daten im JSON-Format.

  • (5) SQL-Befehle über TCP (MariaDB-Standardport 3306); als Antwort Ergebnistabellen.

e) Mia Schröder baut die Check-in-App nach dem MVC-Muster. Beim Scannen eines Badges soll die Maske für die Helfer*innen die Person anzeigen. Ein zweiter Bildschirm am Terminal, der den ankommenden Gästen zugewandt ist, begrüßt die Person mit Namen und zeigt den Fortschritt „eingecheckt: 212 von 400“. Gerade für gehörlose Gäste wie die Referentin Lisa Brandt ist diese sichtbare Begrüßung wichtig. Ein Auszug aus Mias Klassen:

  • CheckinMaske: zeigt das Eingabefeld für den Badge-Code, Name und Ticketart der zuletzt eingecheckten Person sowie den Zähler.

  • CheckinSteuerung: nimmt den gescannten Badge-Code entgegen und ruft die passende Methode zum Einchecken auf.

  • Teilnahmeliste: verwaltet die Anmeldungen, setzt beim Einchecken die Check-in-Zeit und benachrichtigt alle angemeldeten Beobachter.

  • Begruessungsanzeige: zeigt auf dem zweiten Bildschirm den Begrüßungstext und einen Fortschrittsbalken.

ea) Ordne die vier Klassen den Rollen Model, View und Controller zu. (3 Punkte)

Je Klasse 0,75 Punkte:

Zuordnung der Klassen zu den MVC-Rollen
Klasse Rolle
CheckinMaske View
CheckinSteuerung Controller
Teilnahmeliste Model
Begruessungsanzeige View (zweite View desselben Models)

eb) Die Begruessungsanzeige wurde erst nachträglich ergänzt. Erläutere, warum die Klasse Teilnahmeliste keine der beiden Anzeigeklassen direkt kennen soll und welchen Vorteil das bei dieser Erweiterung gebracht hat. (3 Punkte)

  • Die Teilnahmeliste kennt ihre Anzeigen nur über eine Beobachter-Schnittstelle (z. B. update()), nicht über deren Klassen. Model und View sind dadurch lose gekoppelt (1 Punkt).

  • Für die neue Begruessungsanzeige musste die Teilnahmeliste deshalb nicht geändert werden: Die neue View meldet sich als Beobachter an und wird ab dann automatisch benachrichtigt (1 Punkt).

  • Beide Views zeigen immer denselben Stand, weil sie durch dieselbe Benachrichtigung aktualisiert werden. Außerdem lässt sich die Teilnahmeliste ohne Oberfläche testen und in einer anderen Oberfläche wiederverwenden (1 Punkt).

ec) Zeichne ein Diagramm, das die Nachrichten zwischen den vier Klassen darstellt, wenn eine Helferin den Badge von Lisa Brandt scannt. Nummeriere die Nachrichten in der richtigen Reihenfolge und beschrifte sie mit der jeweiligen Nachricht oder Methode. (6 Punkte)

Lösung: Nachrichtenfolge beim Check-in nach dem MVC-Muster (mit KI erstellt)

Ablauf:

  1. Die CheckinMaske (View) meldet den gescannten Code an die CheckinSteuerung (Controller), z. B. badgeGescannt(code).

  2. Die CheckinSteuerung fordert die Teilnahmeliste (Model) zur Zustandsänderung auf: checkIn(code) setzt die Check-in-Zeit.

  3. Die Teilnahmeliste benachrichtigt alle registrierten Views über die Änderung: update() an CheckinMaske (3a) und Begruessungsanzeige (3b).

  4. Beide Views holen sich die geänderten Daten beim Model ab, z. B. getLetzterCheckIn() und getAnzahlEingecheckt() (4a, 4b), und zeigen sie an.

Bewertung: vier Elemente mit Rollen (1 Punkt), Pfeile in der richtigen Richtung (2 Punkte, je fehlendem oder falsch gerichtetem Pfeil 0,5 Punkte Abzug), richtige Reihenfolge der Nummern (1 Punkt), sinnvolle Beschriftungen (2 Punkte). Eigene Methodennamen sind in Ordnung. Ein UML-Sequenzdiagramm oder Kommunikationsdiagramm mit derselben Nachrichtenfolge ist ebenfalls richtig. Gibt das Model die Daten gleich mit der Benachrichtigung weiter (push, z. B. update(anzahl, name)), entfallen die Nachrichten 4a/4b; das ist bei passender Beschriftung ebenfalls richtig.

f) Hannah Klein schreibt in das Team-Wiki: „MVC ist dasselbe wie unsere drei Schichten: View = Präsentationsschicht, Controller = Logikschicht, Model = Datenbank.“ Nimm Stellung zu dieser Aussage und korrigiere sie, wo nötig. (4 Punkte)

Die Aussage ist so nicht richtig (1 Punkt für eine klare Stellungnahme), denn:

  • MVC ist ein Muster für die Benutzeroberfläche und gliedert vor allem die Präsentationsschicht. View und Controller gehören beide zur Präsentation (1 Punkt).

  • Der Controller steuert nur, was nach einer Eingabe passiert. Die Geschäftsregeln (z. B. „bereits eingecheckt“, Ticketart) gehören in die Logikschicht (1 Punkt).

  • Das Model ist nicht die Datenbank, sondern ein Objekt, das den Zustand der angezeigten Daten hält und die Views benachrichtigt; dahinter liegen Logik- und Datenhaltungsschicht. Außerdem ist MVC nicht linear wie ein Schichtenmodell: Das Model benachrichtigt die View (1 Punkt).

Richtig an Hannahs Aussage ist nur, dass beide Konzepte die Software in drei Teile mit getrennten Zuständigkeiten aufteilen (Separation of Concerns).

g) Emre Aksoy schlägt vor, die Maske der Check-in-App nicht mehr über selbst programmierte Beobachter, sondern per Data Binding von JavaFX anzubinden.

ga) Erläutere den Begriff Datenbindung (data binding). (2 Punkte)

Bei der Datenbindung wird eine Eigenschaft eines Steuerelements der Oberfläche (z. B. der Text eines Labels oder Eingabefelds) mit einer Eigenschaft eines Datenobjekts verknüpft (1 Punkt). Das Framework überträgt Änderungen automatisch, je nach Art der Bindung vom Datenobjekt zur Oberfläche oder in beide Richtungen; man muss dafür keinen eigenen Code zum Benachrichtigen und Aktualisieren schreiben (1 Punkt).

gb) In der CheckinMaske gibt es (1) den Zähler „eingecheckt: 212 von 400“ und (2) das Feld „Name auf dem Badge“, in dem die Helfer*innen einen Tippfehler korrigieren können, bevor das Badge gedruckt wird. Begründe für beide Elemente, ob eine einseitige oder eine zweiseitige Bindung passt. (3 Punkte)

    1. Zähler: einseitige Bindung (Datenobjekt → Oberfläche). Der Zähler wird nur angezeigt; niemand soll ihn in der Maske ändern, er ergibt sich aus den Check-ins (1,5 Punkte).
  • (2) Name auf dem Badge: zweiseitige Bindung. Der Name wird aus der Anmeldung angezeigt, und eine Korrektur im Feld muss zurück in das Datenobjekt fließen, damit das Badge mit dem korrigierten Namen gedruckt wird (1,5 Punkte).

So könnte das in JavaFX aussehen (nicht verlangt):

labelZaehler.textProperty().bind(teilnahmeliste.zaehlerTextProperty());
feldBadgeName.textProperty().bindBidirectional(anmeldung.badgeNameProperty());

gc) Nenne je einen Vorteil und einen Nachteil von Data Binding gegenüber dem selbst programmierten Beobachter-Muster. (2 Punkte)

Je 1 Punkt, z. B.:

  • Vorteil: weniger Code zum Anmelden, Benachrichtigen und Aktualisieren; keine vergessenen Aktualisierungen; die Verknüpfung ist deklarativ und übersichtlich.

  • Nachteil: Abhängigkeit vom Framework; Fehler sind schwerer zu finden, weil die Aktualisierung „unsichtbar“ abläuft; bei zweiseitiger Bindung muss die Prüfung der Eingaben bewusst eingeplant werden.

h) Dimitrios meint: „Mit Data Binding seid ihr eigentlich schon fast beim Muster MVVM.“ Beschreibe die Rolle des ViewModels im Muster Model-View-ViewModel und wie es mit der View verbunden ist. (3 Punkte)

  • Das ViewModel hält den Zustand der View (z. B. Text des Zählers, ob der Druckknopf aktiv ist) und enthält die Präsentationslogik. Es nutzt das Model für Daten und Fachlogik (1 Punkt).

  • Die View ist per (meist zweiseitigem) Data Binding an Eigenschaften des ViewModels gebunden; Eingaben und Anzeigen werden automatisch abgeglichen (1 Punkt).

  • Das ViewModel kennt die Steuerelemente der View nicht. Dadurch lässt es sich ohne laufende Oberfläche mit Unit-Tests prüfen, und die View kann z. B. deklarativ in FXML beschrieben werden (1 Punkt).


Hinweis zur Nachnutzung als Open Educational Resource (OER)

Dieser Artikel und seine Texte, Bilder, Grafiken, Code und sonstiger Inhalt sind - sofern nicht anders angegeben - lizenziert unter CC BY 4.0. Nennung gemäß TULLU-Regel bitte wie folgt: “Übungsaufgaben zu Schichtenarchitektur, MVC und Data Binding” von oer-informatik.de (H. Stein), Lizenz: CC BY 4.0. Der Artikel wurde unter https://oer-informatik.de/softwarearchitektur-uebungsaufgaben veröffentlicht, die Quelltexte sind in weiterverarbeitbarer Form verfügbar im Repository unter https://gitlab.com/oer-informatik/design-pattern/architekturmuster. Erstellt mit KI-Assistenz; von mir umfassend redaktionell überarbeitet, geprüft und freigegeben. Stand: 27.10.2026.

[Kommentare zum Artikel lesen, schreiben] / [Artikel teilen] / [gitlab-Issue zum Artikel schreiben]

Kommentare gerne per Mastodon, Verbesserungsvorschläge per gitlab issue (siehe oben). Beitrag teilen: