在将Cache与Decorator模式结合使用时复制代码

我有一个Provider类,并装饰了一个CacheProviderDecorator类。 麻烦的是我需要缓存method的结果,该结果在其他提供者的方法内部被调用:

例如,在提供程序类中:

    public function getUser(int $id): array
{
    return json_decode($this->client->get('user/' . $id)->getBody()->getcontents(),true);
}


    public function getUsers(array $usersIds): array
{
    $usersSurnames = new Collection();

    foreach ($usersIds as $userId) {
        $usersSurnames->push($this->getUser($userId)['surname']);
    }

    return $usersSurnames->toArray();
}

CacheProviderDecorator类:

    public function getUser(int $id): array
{
    $key = self::PROJECT_USER . '_' . $id;

    return $this->cache->remember($key,self::TTL,function () use ($id) {
        return $this->provider->getUser($id);
    });
}

由于getUser()仅在getUsers()内部使用,因此我必须从Provider复制getUsers()方法,否则将始终调用Provider的getUsers(),而Provider的getUser()也是如此(由于$ this->)。

有很多这样的重复。有什么好的建筑解决方案吗?

litao7777 回答:在将Cache与Decorator模式结合使用时复制代码

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3127251.html

大家都在问