Php 使用带装饰器模式的缓存时复制代码
我有一个提供程序类和装饰类,CacheProviderDecorator类。 问题是我需要缓存方法的结果,该方法在其他提供程序的方法中调用: 例如,在提供程序类中:Php 使用带装饰器模式的缓存时复制代码,php,design-patterns,decorator,dry,Php,Design Patterns,Decorator,Dry,我有一个提供程序类和装饰类,CacheProviderDecorator类。 问题是我需要缓存方法的结果,该方法在其他提供程序的方法中调用: 例如,在提供程序类中: public function getUser(int $id): array { return json_decode($this->client->get('user/' . $id)->getBody()->getContents(), true); } public fun
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()
内部使用,我必须从提供者复制getUsers()
方法,否则提供者的getUsers()
将始终被调用,提供者的getUser()
也会被调用(因为$this->)
有很多这样的重复。有什么好的架构解决方案吗 此外,我认为不应该有任何方法不在提供者类内部执行任何请求(该部分是由另一个人编写的),也许将
getUsers()
方法移动到某个服务类中会很好?请查看该链接,其中讨论了相同的问题: