Guten Tag,
ich habe hier eine Übungsaufgabe bzgl. Events. Mir ist die Sache noch sehr unverständlich.
Die Aufgabe ist folgende:
Wenn eine Person dem Schachverein beitritt, wird sie zu einem Mitglied des Vereins (Member.java), d.h. die Mitgliedsinstanz und relevante Mitgliedsangaben (Mitgliedsnummer, Eintrittsdatum, …) werden erst bei Vereinsbeitritt erzeugt. Folgende Events, die von DomainEvent erben, beeinflussen hierbei das Datenmodell und sollen durch den EventProcessor (EventProcessor.java) verarbeitet werden:
• JoinEvent: o Personen treten einem Verein bei und werden zu Mitgliedern dieses Vereins. Die Mitgliedsnummer wird mit jedem neuen Vereinsmitglied um den Wert 1 erhöht.
• LeaveEvent: o Mitglieder treten aus dem Verein aus. Das Austrittsdatum (exitDate1 ) soll hierbei auf das aktuelle Datum gesetzt werden.
Implementieren und testen Sie JoinEvent.java und LeaveEvent.java.
Ja habe hier vorgefertigte Programmstücke. Ich weiß nun gar nicht wie hier alles zusammenhängt.
Wäre schön wenn mir das jemand etwas näher bringen könnte bzgl. dem Sinn des Ganzen.
[CODE lang="java" title="Chessclub.java"]package org.htwdresden.informatik.eventSourcingExercise.model;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import org.htwdresden.informatik.eventSourcingExercise.event.JoinEvent;
import org.htwdresden.informatik.eventSourcingExercise.event.LeaveEvent;
import org.htwdresden.informatik.eventSourcingSimpleDemo.model.Cargo;
import org.htwdresden.informatik.eventSourcingSimpleDemo.model.Ship;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ChessClub extends Club {
private static final Logger log = LoggerFactory.getLogger(ChessClub.class);
private String zps;
private List<Member> memberList = new ArrayList<Member>();
public ChessClub(String zps, String name, Address address) {
super(name, address);
this.zps = zps;
}
public String getZps() {
return zps;
}
public boolean isMember(Person p) {
if(memberIndex(p) != -1 ) {
log.info("found member "+p.getName().getFullName());
return true;
}
return false;
}
// return -1 if member is not found
// otherwise position in list
private int memberIndex(Person p) {
for (Member member : memberList) {
if(p.equals(member)) {
return memberList.indexOf(member);
}
}
return -1;
}
public List<Member> getMembers() {
return memberList;
}
// TODO implement active members. method should return the number of active members
// i.e. where exitDate is null
public long activeMembers() {
return 0;
}
public void handleJoin(JoinEvent event) {
// TODO handleJoin
}
public void handleReverseJoin(JoinEvent event) {
// TODO handleReverseJoin
}
private Member getMember(Person p) {
int memberIndex = memberIndex(p);
if(memberIndex != -1) {
Member m = memberList.get(memberIndex);
return m;
}
return null;
}
public void handleLeave(LeaveEvent event) {
// TODO handleLeave event
}
}
[/CODE]
[CODE lang="java" title="Person.java"]package org.htwdresden.informatik.eventSourcingExercise.model;
import java.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Person {
private static final Logger log = LoggerFactory.getLogger(Person.class);
private Name name;
private Address address;
private Gender gender;
private LocalDate birthDate;
public Gender getGender() {
return gender;
}
public LocalDate getBirthDate() {
return birthDate;
}
public Name getName() {
return name;
}
public Address getAddress() {
return this.address;
}
public void setGender(Gender gender) {
this.gender = gender;
}
private Person(Name name, Address address) {
this.name = name;
this.address = address;
}
public Person(Name name, Address address, Gender gender, LocalDate birthDate) {
this(name,address);
setGender(gender);
this.birthDate = birthDate;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Person)) return false;
Person p = (Person) obj;
// Gleich wenn Name, Geburtsdatum und Adresse übereinstimmen
if(p.getName().equals(this.getName()))
if(p.getBirthDate().equals(this.getBirthDate()))
if(p.getAddress().equals(this.getAddress()))
return true;
return false;
}
}[/CODE]
[CODE lang="java" title="JoinEvent.java"]package org.htwdresden.informatik.eventSourcingExercise.event;
import java.time.LocalDate;
import org.htwdresden.informatik.eventSourcingExercise.model.ChessClub;
import org.htwdresden.informatik.eventSourcingExercise.model.Member;
import org.htwdresden.informatik.eventSourcingExercise.model.Person;
import org.htwdresden.informatik.eventSourcingSimpleDemo.event.DomainEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//TODO implement JoinEvent (as DomainEvent)
public class JoinEvent {
private static final Logger log = LoggerFactory.getLogger(JoinEvent.class);
public JoinEvent(LocalDate date, Person person, ChessClub club) {
}
}[/CODE]
ich habe hier eine Übungsaufgabe bzgl. Events. Mir ist die Sache noch sehr unverständlich.
Die Aufgabe ist folgende:
Wenn eine Person dem Schachverein beitritt, wird sie zu einem Mitglied des Vereins (Member.java), d.h. die Mitgliedsinstanz und relevante Mitgliedsangaben (Mitgliedsnummer, Eintrittsdatum, …) werden erst bei Vereinsbeitritt erzeugt. Folgende Events, die von DomainEvent erben, beeinflussen hierbei das Datenmodell und sollen durch den EventProcessor (EventProcessor.java) verarbeitet werden:
• JoinEvent: o Personen treten einem Verein bei und werden zu Mitgliedern dieses Vereins. Die Mitgliedsnummer wird mit jedem neuen Vereinsmitglied um den Wert 1 erhöht.
• LeaveEvent: o Mitglieder treten aus dem Verein aus. Das Austrittsdatum (exitDate1 ) soll hierbei auf das aktuelle Datum gesetzt werden.
Implementieren und testen Sie JoinEvent.java und LeaveEvent.java.
Ja habe hier vorgefertigte Programmstücke. Ich weiß nun gar nicht wie hier alles zusammenhängt.
Wäre schön wenn mir das jemand etwas näher bringen könnte bzgl. dem Sinn des Ganzen.
[CODE lang="java" title="Chessclub.java"]package org.htwdresden.informatik.eventSourcingExercise.model;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;
import org.htwdresden.informatik.eventSourcingExercise.event.JoinEvent;
import org.htwdresden.informatik.eventSourcingExercise.event.LeaveEvent;
import org.htwdresden.informatik.eventSourcingSimpleDemo.model.Cargo;
import org.htwdresden.informatik.eventSourcingSimpleDemo.model.Ship;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ChessClub extends Club {
private static final Logger log = LoggerFactory.getLogger(ChessClub.class);
private String zps;
private List<Member> memberList = new ArrayList<Member>();
public ChessClub(String zps, String name, Address address) {
super(name, address);
this.zps = zps;
}
public String getZps() {
return zps;
}
public boolean isMember(Person p) {
if(memberIndex(p) != -1 ) {
log.info("found member "+p.getName().getFullName());
return true;
}
return false;
}
// return -1 if member is not found
// otherwise position in list
private int memberIndex(Person p) {
for (Member member : memberList) {
if(p.equals(member)) {
return memberList.indexOf(member);
}
}
return -1;
}
public List<Member> getMembers() {
return memberList;
}
// TODO implement active members. method should return the number of active members
// i.e. where exitDate is null
public long activeMembers() {
return 0;
}
public void handleJoin(JoinEvent event) {
// TODO handleJoin
}
public void handleReverseJoin(JoinEvent event) {
// TODO handleReverseJoin
}
private Member getMember(Person p) {
int memberIndex = memberIndex(p);
if(memberIndex != -1) {
Member m = memberList.get(memberIndex);
return m;
}
return null;
}
public void handleLeave(LeaveEvent event) {
// TODO handleLeave event
}
}
[/CODE]
[CODE lang="java" title="Person.java"]package org.htwdresden.informatik.eventSourcingExercise.model;
import java.time.LocalDate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Person {
private static final Logger log = LoggerFactory.getLogger(Person.class);
private Name name;
private Address address;
private Gender gender;
private LocalDate birthDate;
public Gender getGender() {
return gender;
}
public LocalDate getBirthDate() {
return birthDate;
}
public Name getName() {
return name;
}
public Address getAddress() {
return this.address;
}
public void setGender(Gender gender) {
this.gender = gender;
}
private Person(Name name, Address address) {
this.name = name;
this.address = address;
}
public Person(Name name, Address address, Gender gender, LocalDate birthDate) {
this(name,address);
setGender(gender);
this.birthDate = birthDate;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Person)) return false;
Person p = (Person) obj;
// Gleich wenn Name, Geburtsdatum und Adresse übereinstimmen
if(p.getName().equals(this.getName()))
if(p.getBirthDate().equals(this.getBirthDate()))
if(p.getAddress().equals(this.getAddress()))
return true;
return false;
}
}[/CODE]
[CODE lang="java" title="JoinEvent.java"]package org.htwdresden.informatik.eventSourcingExercise.event;
import java.time.LocalDate;
import org.htwdresden.informatik.eventSourcingExercise.model.ChessClub;
import org.htwdresden.informatik.eventSourcingExercise.model.Member;
import org.htwdresden.informatik.eventSourcingExercise.model.Person;
import org.htwdresden.informatik.eventSourcingSimpleDemo.event.DomainEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//TODO implement JoinEvent (as DomainEvent)
public class JoinEvent {
private static final Logger log = LoggerFactory.getLogger(JoinEvent.class);
public JoinEvent(LocalDate date, Person person, ChessClub club) {
}
}[/CODE]