【问题标题】:Factory concurrent access工厂并发访问
【发布时间】: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


    【解决方案1】:

    每个请求都由 PHP FPM 进程的一个线程处理,但 Objects 只是孤立存在,线程之间不共享。

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

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 2016-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多