Как спроектировать агрегатор? Добрый день. Необходимо присваивать рейтинг организации. 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); } Как правильно? Установка рейтинга - это бизнес правило. Вроде тогда должно быть в сущности. С другой стороны - сам сервис рейтинга это много всеразличных вариантов и захламлять сущность как то не очень. Где его считать?
Для правильного проектирования агрегатора и рейтинга организаций можно рассмотреть следующие варианты:
Считать рейтинг сразу в Entity при создании: в этом случае вы можете передавать объект OrganizationRatingService в конструктор сущности и при создании сущности сразу вычислять и устанавливать рейтинг на основе специализации. Этот способ удобен, если рейтинг зависит только от специализации и других данных сущности.
Рассчитывать рейтинг в сервисе при создании сущности: в этом случае можно передавать в сервис OrganizationRatingService только необходимые данные для рассчета рейтинга (например, специализацию). После создания сущности в сервисе можно рассчитать рейтинг и сохранить его в базу данных.
Рассмотреть использование событийной модели: вы можете создать обработчик событий (например, при создании организации) и в этом обработчике рассчитывать рейтинг организации на основе специализации. Этот подход позволяет разделить логику вычисления рейтинга от сущности и сервиса, что может быть удобным для поддержки и изменений в будущем.
Выбор конкретного способа зависит от особенностей вашего проекта и требований к функциональности агрегатора. Важно также учитывать принцип единственной ответственности и стремиться к четкому разделению функциональности между компонентами системы.
Для правильного проектирования агрегатора и рейтинга организаций можно рассмотреть следующие варианты:
Считать рейтинг сразу в Entity при создании: в этом случае вы можете передавать объект OrganizationRatingService в конструктор сущности и при создании сущности сразу вычислять и устанавливать рейтинг на основе специализации. Этот способ удобен, если рейтинг зависит только от специализации и других данных сущности.
Рассчитывать рейтинг в сервисе при создании сущности: в этом случае можно передавать в сервис OrganizationRatingService только необходимые данные для рассчета рейтинга (например, специализацию). После создания сущности в сервисе можно рассчитать рейтинг и сохранить его в базу данных.
Рассмотреть использование событийной модели: вы можете создать обработчик событий (например, при создании организации) и в этом обработчике рассчитывать рейтинг организации на основе специализации. Этот подход позволяет разделить логику вычисления рейтинга от сущности и сервиса, что может быть удобным для поддержки и изменений в будущем.
Выбор конкретного способа зависит от особенностей вашего проекта и требований к функциональности агрегатора. Важно также учитывать принцип единственной ответственности и стремиться к четкому разделению функциональности между компонентами системы.