С тех пор, как я прочитал об анемической модели домена (чем я постоянно занимался), я действительно пытался уйти от создания объектов домена, которые были просто " ведра геттеров и сеттеров" и вернуться к своим ООП-корням.
Однако проблема, приведенная ниже, - это та, с которой я часто сталкиваюсь, и я не уверен, как мне следует решить ее.
Скажи у нас есть класс Team, в котором много Игроков. Неважно, какой это вид спорта

Итак, у нас есть команда, у которой есть список игроков:
Код: Выделить всё
public class Team {
private List
players;
// snip.
public void removePlayer(Player player) {
players.remove(player);
// Do other admin work when a player leaves
}
}
Код: Выделить всё
public class Player {
private Team team;
public void leaveTeam() {
team = null;
// Do some more player stuff...
}
}
Но что тогда, если Игрок управляет уходом? Следует ли методу LeaveTeam() вызывать команду team.removePlayer(this)? Не без создания бесконечного цикла!
Раньше я бы просто делал эти объекты «тупыми» POJO и имел сервисный уровень. делай работу. Но даже сейчас у меня все еще остается эта проблема: чтобы избежать циклических зависимостей, уровень обслуживания по-прежнему связывает все это вместе, т. е.
Код: Выделить всё
public class SomeService {
public void leave(Player player, Team team) {
team.removePlayer(player);
player.leaveTeam();
}
}
Спасибо всем за ответы. Я принимаю решение Гродригеса, поскольку оно наиболее очевидное (не могу поверить, что оно мне не пришло в голову) и легко реализуемое. Тем не менее, DecaniBass действительно дает хорошие результаты. В ситуации, которую я описывал, игрок может покинуть команду (и знать, в команде он или нет), а также команду, инициировавшую удаление. Но я согласен с вашей точкой зрения, и мне не нравится идея о том, что в этом процессе есть две «точки входа». Еще раз спасибо.
Подробнее здесь: https://stackoverflow.com/questions/400 ... pendencies