Eine Veranstaltung hat keine Teilnehmer

Bei der Konzeption der  Veranstaltungs-Anmeldung dachten wir zunächst daran, dass es eine Teilnehmerliste und eventuell eine Warteliste pro Veranstaltung geben geben sollte. Dies erwies sich jedoch bald als zu unflexibel:
Was zum Bespiel tun bei Anmeldeheuristiken wie RoundRobin? Hier meldet man sich für einen Course an, die Zuteilung zu einem bestimmten Track (zu diesen Begriffen siehe meinen letzen Blogpost) erfolgt aber durch das System. Ähnlich bei Losverfahren bei einem Course mit Tracks. Hier resultiert die Anmeldung darin, dass der Angemeldete zunächst in einer virtuellen Warteliste des Courses gespeichert ist; erst wenn die Verlosung der Plätze durchgeführt wird, erfolgt die Verteilung auf einzelne Tracks – die selbst aber keine Warteliste haben.
Wir haben uns für ein Subscription-Objekt entschieden, in dem die Verbindung zwischen Teilnehmer und Veranstaltung gespeichert wird:
Subscription(Course course, Track track, Participant participant, Subscriptiontype type)
Subscriptiontype := {SUBSCRIBED|WAITINGLIST|UNSUBSCRIBED}
Eine Veranstaltung hat somit eine Liste aus Subscriptions und über deren Type kann Teilnehmer- und Warteliste dynamisch extrahiert werden.
Also, wie im Titel des Posts: Eine Veranstaltung hat keine Teilnehmer, sondern Subscriptions mit Subscriptiontype=SUBSCRIBED