Übung »Implementierung eines Zustandsdiagramms für ein Aggregate«
Zu einem gegebenen Zustandsdiagramm, das fachliche Abfolgen in einem Aggregate beschreibt, implementieren Sie die entsprechende Business-Logik in Java.
- Dauer
- Ca. 120 min
- Erfordert vorher die Bearbeitung von ...
- Übung Zustandsdiagramm für ein Entity
Worum geht es?
In der Übung Zustandsdiagramm für ein Entity
haben wir das logische Datenmodell für ein Exam
von Studierenden angeschaut:
Dafür haben wir die folgende Zustandsfolge identifiziert (schauen Sie sich auch noch einmal den beschreibenden
Text in Zustandsdiagramm für ein Entity an):
Ihre Aufgabe
- Implementieren Sie das Entity
Exam
. Orientieren Sie sich am Text, welche Methoden Sie implementieren müssen.
- Schreiben Sie Unit Tests für die folgenden Fälle (auf Englisch):
- Students can register for an exam until the registration period is closed. Same for cancelling participation.
- Students can only cancel their participation if they have registered first.
- Students can upload a solution only after the exam has been opened, and before it is closed.
- A supervisor can only publish the results if all corrections are available, and none of it is marked “disputed”.
- Students can access their solutions only after they have been published, and before the exam is archived.
Hinweise
- Auch wenn hier von Entity die Rede ist, brauchen Sie die Persistenz für diese Übung nicht zu berücksichtigen.
D.h. es reicht, einfache POJOs zu implementieren. (Annotation mit
@Entity
oder @Embeddable
schadet nicht,
kann aber weggelassen werden).
Supervisor
ist nicht Teil des LDM. Sie brauchen also nicht nachzuhalten, wer eine Korrektur vorgenommen hat.
- Die Klassen aus dem LDM von oben können Sie (bis auf Exam) mit den genannten Attributen implementieren;
insbesondere brauchen Sie keine Punkte für die Klausur vorzusehen.
- Ein
Exam
wird einfach per Konstruktur erzeugt. Stellen Sie sicher, dass es dann im richtigen Startzustand ist.
- Bei
Exam
brauchen Sie noch weitere Member-Variablen für die Abbildung der Zustände; das ist Ihnen überlassen.
- Wenn Sie einen Methodenaufruf in einem invaliden Zustand haben, werfen Sie einfach eine
RuntimeException
.
- In einem Unit-Test können Sie so einfach auf eine erwartete Exception prüfen:
assertThrows( RuntimeException.class, () -> {
// ... action expected to throw an exception ...
});