建造者模式太大了

Builder pattern is to big

我正在处理一个包含一些大型 DTO 对象的项目。所以我尝试使用构建器,但现在他们的构建器也变得太大了。

class foo
{
    private $bar1;
    private $bar2;
    private $bar3;
    private $bar4;
    private $bar5;
    private $bar6;
    private $bar7;
    private $bar8;
    ...

    public function __construct(fooBuilder $builder)
    {
        $this->bar1 = $builder->getBar1()
    }
    ...
}

class fooBuilder
{
    private $bar1;
    private $bar2;
    private $bar3;
    private $bar4;
    private $bar5;
    private $bar6;
    private $bar7;
    private $bar8;
    ...

    /**
     * @return mixed
     */
    public function getBar1()
    {
        return $this->bar1;
    }

    /**
     * @param mixed $bar1
     * @return fooBuilder
     */
    public function setBar1($bar1)
    {
        $this->bar1 = $bar1;

        return $this;
    }
    ...
}

所以我的问题是如何减少构建器中 getter 和 setter 的数量,或者是否有更好的方法来构建我的大型 DTO。

我的另一个问题是如何为此编写有意义的单元测试?

为了减少 getter 或 setter 的数量,您可以使用魔术方法:

二传手使用__set(),二传手使用__get()

这是一个例子:

public function __set($property,$value) {
      $this->$property = $value;
  }

 public function __get($property) {
      return $this->$property;
  }

当你想获取你的属性数据时,只需用

调用它
$object->attribute;

您可以使用一些测试来验证您的 class 是否具有此属性,然后再使用 :

bool property_exists (mixed $class, string $property)

您可以在此处查看文档: http://php.net/property-exists