生成器模式是大

时间:2018-04-04 08:22:40

标签: php unit-testing builder

我正在开发一个包含一些大型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。

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

1 个答案:

答案 0 :(得分:0)

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

对设置者使用__set(),为设置者使用__get()

以下是一个例子:

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

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

如果您想获取属性数据,只需使用

调用即可
$object->attribute;

您可以使用某些测试来验证您的类是否具有此属性,然后使用以下命令进行设置:

bool property_exists (mixed $class, string $property)

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