ОО-проектирование и циклические зависимостиJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 ОО-проектирование и циклические зависимости

Сообщение Anonymous »

В настоящее время я борюсь с проблемой циклической зависимости при разработке своих классов.

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

Однако проблема, приведенная ниже, - это та, с которой я часто сталкиваюсь, и я не уверен, как мне следует решить ее.

Скажи у нас есть класс 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...
}
}
Можно предположить, что оба метода (удалить и оставить) имеют специфичную для предметной области логику, которую необходимо запускать всякий раз, когда команда удаляет игрока, а игрок покидает команду. Поэтому моя первая мысль заключается в том, что когда Команда выгоняет игрока, метод removePlayer(...) также должен вызывать метод player.leaveTeam()...

Но что тогда, если Игрок управляет уходом? Следует ли методу 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ОО-проектирование и циклические зависимости
    Anonymous » » в форуме JAVA
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Циклические зависимости, шаблоны и структура проекта в проекте C++ и Qt [закрыто]
    Anonymous » » в форуме C++
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Циклические зависимости между интерфейсами
    Anonymous » » в форуме JAVA
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Циклические зависимости между интерфейсами
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Циклические зависимости между интерфейсами
    Anonymous » » в форуме JAVA
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»