SchlossPilsener
Cadet 1st Year
- Registriert
- Dez. 2020
- Beiträge
- 10
Guten Tag,
in einer Übungsaufgabe soll ich Event Sourcing umsetzen. Ich kenne mich damit nicht aus und habe bisher nur von einem Beispiel abgekupfert.
Es geht um eine Klasse Teilnehmer.
Für diese Teilnehmer sollen nun Zustände angelegt werden:
Jeder Teilnehmer soll einen bestimmten Status hinsichtlich seiner Anmeldung haben. Es können dadurch drei verschiedene Zustände erreicht werden: ANGEMELDET, ANGEMELDETBEZAHLT und ABGEMELDET.
Jeder Wechsel des Zustandes führt zu einem Ereignis. Zu Beginn befindet sich der Teilnehmer im Zustand ANGEMELDET. Wenn das Ereignis "Zahlung" auftritt, dann wird der Teilnehmer in den Zustand ANGEMELDETBEZAHLT gesetzt. Wenn danach das Ereignis "Abmeldung" auftritt, dann wird der Teilnehmer in den Zustand abgemeldet überführt.
Bisher habe ich folgendes:
Ist das bisher in Ordnung? Habe mich vorerst nur am payedEvent versucht.
in einer Übungsaufgabe soll ich Event Sourcing umsetzen. Ich kenne mich damit nicht aus und habe bisher nur von einem Beispiel abgekupfert.
Es geht um eine Klasse Teilnehmer.
Für diese Teilnehmer sollen nun Zustände angelegt werden:
Jeder Teilnehmer soll einen bestimmten Status hinsichtlich seiner Anmeldung haben. Es können dadurch drei verschiedene Zustände erreicht werden: ANGEMELDET, ANGEMELDETBEZAHLT und ABGEMELDET.
Jeder Wechsel des Zustandes führt zu einem Ereignis. Zu Beginn befindet sich der Teilnehmer im Zustand ANGEMELDET. Wenn das Ereignis "Zahlung" auftritt, dann wird der Teilnehmer in den Zustand ANGEMELDETBEZAHLT gesetzt. Wenn danach das Ereignis "Abmeldung" auftritt, dann wird der Teilnehmer in den Zustand abgemeldet überführt.
Bisher habe ich folgendes:
Ist das bisher in Ordnung? Habe mich vorerst nur am payedEvent versucht.
Java:
package veranstaltung;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Teilnehmer {
static int idnumber=0;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String vorname;
private String wohnort;
public enum Status {ANGEMELDET, ANGEMELDETBEZAHLT, ABGEMELDET}
private Status st;
protected Teilnehmer() {}
public Teilnehmer(Long id, String name, String vorname,String wohnort)
{
this.id=id;
this.name=name;
this.vorname=vorname;
this.wohnort=wohnort;
st=Status.ANGEMELDET;
}
public static String erzeugeID ()
{
String id= "JAVALAND-";
id=id+idnumber;
idnumber++;
return id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVorname() {
return vorname;
}
public void setVorname(String vorname) {
this.vorname = vorname;
}
public String getWohnort() {
return wohnort;
}
public void setWohnort(String wohnort) {
this.wohnort = wohnort;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Status getSt() {
return st;
}
public void setSt(Status st) {
this.st = st;
}
public void handlePayedEvent(PayedEvent payedEvent) {
payedEvent.getTeilnehmer().st=Status.ANGEMELDETBEZAHLT;
}
public String toString()
{
return getVorname()+getName()+getWohnort()+getSt();
}
}
Java:
package veranstaltung;
import java.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public abstract class DomainEvent {
private static final Logger log = LoggerFactory.getLogger(DomainEvent.class);
LocalDate recordedDate, occuredDate;
public DomainEvent(LocalDate occuredDate) {
log.info("created at "+occuredDate.toString());
this.occuredDate = occuredDate;
this.recordedDate=LocalDate.now();
}
public abstract void process();
}
Java:
package veranstaltung;
import veranstaltung.DomainEvent;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class EventProcessor {
private static final Logger log= LoggerFactory.getLogger(EventProcessor.class);
List logList= new ArrayList<DomainEvent>();
public void process(DomainEvent domainEvent)
{
log.info("process"+domainEvent.getClass());
domainEvent.process();
logList.add(domainEvent);
}
}
Java:
package veranstaltung;
import java.time.LocalDate;
public class PayedEvent extends DomainEvent{
private Teilnehmer teilnehmer;
public PayedEvent (LocalDate date, Teilnehmer t)
{
super (date);
setTeilnehmer(teilnehmer);
}
@Override
public void process() {
teilnehmer.handlePayedEvent(this);
}
public PayedEvent setTeilnehmer(Teilnehmer teilnehmer)
{
this.teilnehmer=teilnehmer;
return this;
}
public Teilnehmer getTeilnehmer() {
return teilnehmer;
}
}