Size: a a a

2020 September 14

В

Виктор in Yii Framework 3
Сергей Предводителев
"Если у этой задачи есть некая самостоятельная ценность, отвлеченная от репозитория" - можешь пример привести?
Например, ты хочешь сделать сервис, способный считать среднее значение любого поля любой сущности. Или этот функционал напрямую связан с каким-то модулем системы или доменной сущностью. И так далее
источник

СП

Сергей Предводителев... in Yii Framework 3
В целом понял. Спасибо :)
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Идеологический вопрос...

Есть класс-сущность (например, User), есть класс-репозиторий для этой сущности.

Есть различные задачки, которые решаются с помощью запроса к хранилищу, например, задача посчитать средний возраст пользователей.

Вот для решения такой задачи правильнее создать отдельный класс или добавлять это как методы в репозиторий?
Репозиторий должен возвращать либо сущность либо коллекцию сущностей, пихать туда функционал сервиса - так себе идея. По мне правильно выносить такие вещи в отдельный сервис. $userService->getAverageAge().
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Репозиторий должен возвращать либо сущность либо коллекцию сущностей, пихать туда функционал сервиса - так себе идея. По мне правильно выносить такие вещи в отдельный сервис. $userService->getAverageAge().
И прям в сервисе писать SQL ?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
И прям в сервисе писать SQL ?
Зависит от задач, часто некоторые вещи лучше делать прямой выборкой из базы.
источник

В

Виктор in Yii Framework 3
Dmitriy S
Репозиторий должен возвращать либо сущность либо коллекцию сущностей, пихать туда функционал сервиса - так себе идея. По мне правильно выносить такие вещи в отдельный сервис. $userService->getAverageAge().
Репозиторий (сферический в вакууме) - это способ взаимодействия с хранилищем, абстракция поверх dbal. Он реализует задачи взаимодействия с dbal, и подсчет среднего значения в них входит. А дальше все зависит от проекта.
источник

СП

Сергей Предводителев... in Yii Framework 3
Получается если такие вещи и выносить в отдельный класс, то лежать этот класс должен где-то рядом с репозиторием.
источник

SI

Sergei Iamskoi in Yii Framework 3
Доброе утро! В случае эксепшена - весь стэктрейс вываливается в аутпут. Что-то туплю, где это конфигурируется?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Получается если такие вещи и выносить в отдельный класс, то лежать этот класс должен где-то рядом с репозиторием.
Ему репозиторий в конструкторе передается.
источник

RT

Roman Tsurkanu in Yii Framework 3
Sergei Iamskoi
Доброе утро! В случае эксепшена - весь стэктрейс вываливается в аутпут. Что-то туплю, где это конфигурируется?
Yiisoft\Yii\Web\ErrorHandler\ErrorHandler
Yiisoft\Yii\Web\ErrorHandler\ErrorCatcher
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Ему репозиторий в конструкторе передается.
А зачем ему репозиторий?
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
А зачем ему репозиторий?
Выборки из него делать
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Выборки из него делать
Так мне надо напрямую в БД делать запросы (считать средний возраст например), зачем тут репозиторий
источник

DS

Dmitriy S in Yii Framework 3
Сергей Предводителев
Так мне надо напрямую в БД делать запросы (считать средний возраст например), зачем тут репозиторий
Это только одна задача, могут быть и другие же в сервисе.
источник

RT

Roman Tsurkanu in Yii Framework 3
final class UserService
{
   private
UserComponent $user;
   private UserRepository $repository;

   public function __construct(
UserComponent $user, UserRepository $repository)
   {
       $this->user = $user;
       $this->repository = $repository;
   }

   public function getAverageAge(): int
   {
       return $this->repository->getAverageAgeByUserId($this->user->getId());
   }
}
источник

СП

Сергей Предводителев... in Yii Framework 3
Dmitriy S
Это только одна задача, могут быть и другие же в сервисе.
Ну да, в не которых случаях может понадобится
источник

СП

Сергей Предводителев... in Yii Framework 3
Roman Tsurkanu
final class UserService
{
   private
UserComponent $user;
   private UserRepository $repository;

   public function __construct(
UserComponent $user, UserRepository $repository)
   {
       $this->user = $user;
       $this->repository = $repository;
   }

   public function getAverageAge(): int
   {
       return $this->repository->getAverageAgeByUserId($this->user->getId());
   }
}
средний возраст всех пользователей
источник

RT

Roman Tsurkanu in Yii Framework 3
final class UserStatisticService
{
   private UserRepository $repository;

   public function __construct(UserRepository $repository)
   {
       $this->repository = $repository;
   }

   public function getAverageAge(): int
   {
       return $this->repository->getAverageAgeAllUsers();
   }
}
источник

СП

Сергей Предводителев... in Yii Framework 3
Roman Tsurkanu
final class UserStatisticService
{
   private UserRepository $repository;

   public function __construct(UserRepository $repository)
   {
       $this->repository = $repository;
   }

   public function getAverageAge(): int
   {
       return $this->repository->getAverageAgeAllUsers();
   }
}
Смысл сервиса, когда я могу сразу репозиторий запросить?
источник

SI

Sergei Iamskoi in Yii Framework 3
Roman Tsurkanu
Yiisoft\Yii\Web\ErrorHandler\ErrorHandler
Yiisoft\Yii\Web\ErrorHandler\ErrorCatcher
Не вижу у них каких-либо параметров, на тему прод\девелоп, показывать только HttpException и т.д. Т.е. надо самому реализовывать этой функционал на их базе и использовать свои хендлеры и кэтчеры?
источник