【发布时间】:2021-10-25 02:44:43
【问题描述】:
在为工厂编码时,我总是做一件事:
final class FooFactory implements FooFactoryInterface
{
/**
* @var array<string=>mixed> - constructor argument names to values
*/
private array $constructorArguments = [];
public function withBar(BarInterface $bar): static
{
$factory = clone $this;
$factory->constructorArguments['bar'] = $bar;
return $factory;
}
}
当调用工厂的方法时(也可以用于实体水化),我总是将它添加到新工厂以避免并发访问,总是出于安全考虑,但问题是否会发生?
所有客户端都使用同一个工厂,内存中的对象吗? 我倾向于说每个请求都会触发所有对象的创建,然后将其销毁,但我不能 100% 确定非克隆版本是安全的。
有一个 void 返回类型将有助于代码理解,在 C 函数中返回它们作为参数的相同字符串是令人困惑的,如果可以避免流式模式,我会接受它。 另外,接口不能强制做作来获得实现类给出的工厂的新状态,这对我来说是个问题,接口应该说明一切。
那么,克隆还是不克隆?这就是设计问题。
【问题讨论】:
标签: php design-patterns concurrency factory fluent