工厂并发访问

Factory concurrent access

当编码工厂时,我总是做一件事:

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 return 类型有助于代码理解,在 C 函数中 return 使用相同的字符串作为参数会造成混淆,如果可以避免流畅的模式,我会采用它。 另外,接口不能强制执行,必须完成才能获得实现 class 给出的工厂的新状态,这对我来说是个问题,接口应该说明一切。

那么,克隆还是不克隆?这就是设计问题。

每个请求都由 PHP FPM 进程的一个线程处理,但对象仅独立存在,不在线程之间共享。

我会说没有必要克隆...