这更像是一个最佳实践问题。
假设我有一个表格:
<form action="self.php" method="POST">
<input type="text" name="aA" />
<input type="text" name="aB" />
<input type="text" name="aC" />
</form>
以及PHP中相应的类:
class A
{
public function getA(){
return $this->a;
}
public function setA($a){
$this->a = $a;
}
public function getB(){
return $this->b;
}
public function setB($b){
$this->b = $b;
}
public function getC(){
return $this->c;
}
public function setC($c){
$this->c = $c;
}
private $a;
private $b;
private $c;
}
我设法从表单中发送数据。现在,我需要将表单数据转换为A.的实例
我目前正在做的事情如下:
abstract class AStrategy {
public function doMapping(){
$a = new A();
if (isset($_POST['aA']) === true) {
$a->setA($_POST['aA']);
}
... (same for b and c)
return $a; //A completely mapped object
}
}
我非常清楚这是非常糟糕的做法(违反DRY)。
- 这样做的最佳做法是什么
- 如果我有一个复杂的对象树呢?如果我需要同时映射相关的对象,该怎么办
- 谁应该做映射?谁应该创建这样的对象
事先谢谢。
对于简单对象,使用构造函数:
public function __construct($a, $b, $c) {
$this->a = $a;
$this->b = $b;
$this->c = $c;
}
对于更复杂的对象,请使用Mapper:
class AMapper {
public function fetch(A $aObject) {}
}