Мне нужно создать ресурс, который должен собирать информацию из нескольких моделей.
В данный момент я создаю обычный ресурс:
$movieResource = new MovieResource($movie);
Внутри MovieResource::toArray()
: *Класс 1007 *
public function toArray($request)
{
$this->initRepos(); // initializing used repositories as static fields
$movieData = [ // transforming model to resource
'title' => $this->title,
];
$this->attachSounds($movieData); // Uses two unrelated tables
$this->attachUrl($movieData); // Uses one unrelated table
$this->attachAnotherInfo($movieData); // Uses one unrelated table
return $movieData;
}
MovieResource
используется в нескольких разных местах проекта.Чтобы не дублировать логику, я решил внедрить репозитории в ресурс.
В некоторых местах MovieResource
широко используется, поэтому используемые репозитории инициализируются как статические свойства класса MovieResource
(чтобы избежать инициализации нескольких экземпляров))
Такая структура, однако, имеет некоторые ограничения: тестирование практически невозможно, поскольку статические методы не могут быть смоделированы.Класс ресурсов должен быть как можно более простым, но теперь он перегружен.
Я знаю, что текущее решение далеко от идеального, поэтому я прошу вас о помощи, совете или опыте по поводу того, как текущее решениеможет быть улучшено.