【发布时间】:2012-06-01 09:24:46
【问题描述】:
MyClass 有多个字段,其中每个值取决于另一个实例值,最后取决于DependencyClass。一个很简单的例子:
解决方案 A(使用构造函数)
public class MyClass
{
private $myField1, $myField2;
public function MyClass(DependencyClass $dependency)
{
$value = $dependency->getValue();
$value++; // Computations on dependency value
$this->myField1 = $value + 3;
$this->myField2 = $value - 1;
}
public function getMyField1()
{
return $this->myField1;
}
public function getMyField2()
{
return $this->myField2;
}
}
我的问题是,类构造函数是我应该放置此计算逻辑的正确位置吗?或者更适合做一些代码重复,例如:
解决方案 B(仅用于依赖的构造函数)
public class MyClass
{
private $dependency;
public function MyClass(DependencyClass $dependency)
{
$this->dependency= $dependency
}
public function getMyField1()
{
$value = $this->dependecy->getValue();
$value++; // Computations on dependency value
return $value + 3;
}
public function getMyField2()
{
$value = $this->dependecy->getValue();
$value++; // Computations on dependency value
return $value - 1;
}
}
或使MyClass 仅是一个容器,而用户是一个外部汇编程序类,例如:
解决方案 C(外部汇编器)
Class Assembler
{
public getMyClass()
{
$dependency = new Dependency();
$value = $dependency->getValue();
$value++; // Computations on dependency value
$myClass = new MyClass();
$myClass->setMyField1($value + 3);
$myClass->setMyField2($value - 1);
return $myClass;
}
}
【问题讨论】:
-
我会说这取决于一点,但是解决方案 B 对我来说是最直接的,当您的代码增长时这通常会很好。另外,我认为您已经大大简化了示例,并且这样做可能会丢失问题。
标签: php design-patterns object constructor