@nskaskyou

Какой паттерн нужен для того чтобы познакомить две сущности?

Есть сущности: планета и игрок. Эти сущности должны знать друг о друге все публичное. Передавать сущности друг в друга аргументами никак.

1. Сущности могут создаваться в любом порядке, то есть при появлении игрока планеты для него еще может и не быть и наоборот планета может появиться раньше игрока.

2. Сущность планеты используется в геттерах игрока, а игрок используется в геттерах планеты (в TS в геттеры нельзя передать параметры)
Ну и отношение игрока к планетам один к множеству
export class Player {
  private readonly _planets: Array<Planet>;
  constructor(private readonly _id: string) {}

  public get id(): string {
    return this._id;
  }

  public get planets(): Array<number> {
    return this._planets.map((planet) => planet.position);
  }
}

export class Planet {
  private readonly _player: Player;
  constructor(private readonly _position: number) {}

  public get position(): number {
    return this._position;
  }

  public get owner(): string {
    return this._player.id;
  }
}

У кого какие идеи?
  • Вопрос задан
  • 113 просмотров
Пригласить эксперта
Ответы на вопрос 2
trapwalker
@trapwalker
Программист, энтузиаст
А в чем. собственно, проблема?
Планета у вас опционально имеет игрока. При присваивании планете игрока она обязана дёрнуть соответствующий метод у игрока и добавиться ему в список планет.
В Питоне я бы использовал слабоые ссылки на планеты в списке у игрока.
Прежде чем искать идеальную архитектуру вам стоит понять для чего вам всё это нужно и не делать лишнего.
Ответ написан
Комментировать
@basili4-1982
Я бы сделал репозиторий всю логику вынес бы туда. и вызывал бы методы репа для операций.
Добавить пользователю планету
r.userAddPlanet(u,p)
Ну и все в таком духе. Что дает 1. Прячем знание о низком уровне за слоем понятной программисту использующему код абстракции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы