Задать вопрос
@microf

Как спроектировать агрегатор?

Добрый день. Необходимо присваивать рейтинг организации.
public function __construct(
            OrganizationID $id,
            Name $name,
            array $phones,
            array $addresses,
           Specialization $specialization
    ) { }

Первоначальный рейтинг может присваиваться при сохранении организации и зависит от Specialization (это специализации организации, чем больше, тем лучше). Как это организовать?
Делать это в сервисе при создании?

public function create(OrganizationRepositoryInterface $repository, OrganizationRatingService $rating): void
    { 
    $organization = new Organization(
     ... 
    $this->repository = add($organization)
    $rating (Вот что сюда передать, только специализации? а как потом сохранить?
)
}

Считать ли рейтинг сразу в Entity при создании? Типа
public function __construct(
            OrganizationID $id,
            Name $name,
            array $phones,
            array $addresses,
           Specialization $specialization,
           OrganizationRatingService $rating
    ) {
    $rating->setRating($specialization);
 }


Как правильно? Установка рейтинга - это бизнес правило. Вроде тогда должно быть в сущности. С другой стороны - сам сервис рейтинга это много всеразличных вариантов и захламлять сущность как то не очень.
Где его считать?
  • Вопрос задан
  • 296 просмотров
Подписаться 2 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик расширенный
    14 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
@EvgeniiR
https://github.com/EvgeniiR
1. Сделать отдельную сущность - Рейтинг Организации, и иметь общую айдишку с организацией. Там уже статический конструктор инициализирующий рейтинг по количеству специализаций.
Судя по описанию, ни имя, ни телефоны, ни адреса для расчета рейтинга не нужны, а значит смысла ложить его в ту же сущность нет.
Думаю самый оптимальный вариант.

2. Сущность можно при желании положить в поле в корне агрегата.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы