Seitdem ich vom Anemic Domain Model gelesen habe (etwas, das ich die ganze Zeit gemacht habe), habe ich wirklich versucht, davon wegzukommen, Domänenobjekte zu erstellen, die nur „ Eimer voller Getter und Setter“ und kehre zu meinen OO-Wurzeln zurück.
Das folgende Problem ist jedoch eines, auf das ich häufig stoße, und ich bin mir nicht sicher, wie ich es anstellen soll Löse es.
Angenommen, wir haben eine Team-Klasse, die viele Spieler hat. Es spielt keine Rolle, um welche Sportart es sich handelt

Also Wir haben das Team, das eine Liste von Spielern hat:
Code: Select all
public class Team {
private List
players;
// snip.
public void removePlayer(Player player) {
players.remove(player);
// Do other admin work when a player leaves
}
}
Code: Select all
public class Player {
private Team team;
public void leaveTeam() {
team = null;
// Do some more player stuff...
}
}
Was aber, wenn der Spieler den Abgang vorantreibt – sollte die Methode „leaveTeam()“ team.removePlayer(this) aufrufen? Nicht ohne eine Endlosschleife zu erstellen!
In der Vergangenheit hätte ich diese Objekte einfach zu „dummen“ POJOs gemacht und eine Serviceschicht gehabt Mach die Arbeit. Aber selbst jetzt bleibt mir immer noch dieses Problem: Um zirkuläre Abhängigkeiten zu vermeiden, muss die Serviceschicht immer noch alles miteinander verknüpfen – d. h.
Code: Select all
public class SomeService {
public void leave(Player player, Team team) {
team.removePlayer(player);
player.leaveTeam();
}
}
Vielen Dank an alle für die Antworten. Ich akzeptiere die Lösung von Grodriguez, da sie die offensichtlichste (ich kann nicht glauben, dass sie mir nicht in den Sinn gekommen ist) und einfach zu implementieren ist. DecaniBass bringt jedoch einen guten Punkt auf den Punkt. In der von mir beschriebenen Situation ist es möglich, dass ein Spieler ein Team verlässt (und sich darüber im Klaren ist, ob er einem Team angehört oder nicht), ebenso wie das Team, das den Abgang vorantreibt. Aber ich stimme Ihrem Standpunkt zu und mir gefällt die Vorstellung nicht, dass es in diesem Prozess zwei „Einstiegspunkte“ gibt. Nochmals vielen Dank.