我需要创建一个应该从多个模型收集信息的资源。
此刻,我正在创建常规资源:
$movieResource = new MovieResource($movie);
在MovieResource::toArray()
内:
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
类的静态属性(以避免多个实例初始化)的原因
但是,这种结构有一些局限性:测试几乎是不可能的,因为不能模拟静态方法。资源类应该尽可能简单,但是现在它已重载。
我知道当前的解决方案远非理想,这就是为什么我要向您寻求有关如何增强当前解决方案的帮助,建议或经验。