8
我一直在實現值對象作爲定義DBAL類型在Doctrine 2中,它一直工作正常。不過,我一直在想,這是否是最好的方法。我想過使用Post Load偵聽器來實例化值對象。在請求時還通過實體訪問器實例化它們,後者的優勢是我不會實例化比我需要的更多的對象。Doctrine 2值對象
我的問題是:哪種方法最好?還是有更好的方法來做到這一點?上面有沒有什麼問題或不合理的表現?
我一直在實現值對象作爲定義DBAL類型在Doctrine 2中,它一直工作正常。不過,我一直在想,這是否是最好的方法。我想過使用Post Load偵聽器來實例化值對象。在請求時還通過實體訪問器實例化它們,後者的優勢是我不會實例化比我需要的更多的對象。Doctrine 2值對象
我的問題是:哪種方法最好?還是有更好的方法來做到這一點?上面有沒有什麼問題或不合理的表現?
恕我直言,兩種方法同樣有價值,同時等待native support for value objects。
我個人傾向於第二種方法有兩個原因(請在實例他們通過存取):
這種方法的一個例子:
class User
{
protected $street;
protected $city;
protected $country;
public function setAddress(Address $address)
{
$this->street = $address->getStreet();
$this->city = $address->getCity();
$this->country = $address->getCountry();
}
public function getAddress()
{
return new Address(
$this->street,
$this->city,
$this->country
);
}
}
該代碼將是相當容易的重構時學說將提供原生支持VO。
關於custom mapping types,我使用它們爲好,單場VO(Decimal
,Point
,Polygon
,...),但往往會保留他們爲通用型,可在多個項目中使用可重複使用的類型,而不是針對項目特定的單場VO,我贊成上述方法。