建造者模式太大了
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
我正在处理一个包含一些大型 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