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

21 Авг 2019 в 06:58
203 +1
0
Ответы
1

Для правильного проектирования агрегатора и рейтинга организаций можно рассмотреть следующие варианты:

Считать рейтинг сразу в Entity при создании: в этом случае вы можете передавать объект OrganizationRatingService в конструктор сущности и при создании сущности сразу вычислять и устанавливать рейтинг на основе специализации. Этот способ удобен, если рейтинг зависит только от специализации и других данных сущности.

Рассчитывать рейтинг в сервисе при создании сущности: в этом случае можно передавать в сервис OrganizationRatingService только необходимые данные для рассчета рейтинга (например, специализацию). После создания сущности в сервисе можно рассчитать рейтинг и сохранить его в базу данных.

Рассмотреть использование событийной модели: вы можете создать обработчик событий (например, при создании организации) и в этом обработчике рассчитывать рейтинг организации на основе специализации. Этот подход позволяет разделить логику вычисления рейтинга от сущности и сервиса, что может быть удобным для поддержки и изменений в будущем.

Выбор конкретного способа зависит от особенностей вашего проекта и требований к функциональности агрегатора. Важно также учитывать принцип единственной ответственности и стремиться к четкому разделению функциональности между компонентами системы.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир