@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);
 }


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

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

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

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