IMHOでは、どちらの方法も同等の価値があり、native support for value objectsを待っています。二つの理由
は、私は個人的に第二のアプローチを好む(要求されたときにアクセサを介してそれらをインスタンス化する):
- あなたが述べたように、それは必要なときに変換がのみ行われるように優れたパフォーマンスを提供しています。
- これは、アプリケーションをDoctrine依存から切り離します。つまり、Doctrine固有のコードが少なくて済みます。
このアプローチの例:
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
);
}
}
DoctrineはネイティブVOのサポートを提供する際にこのコードは、リファクタリングすることはかなり簡単になります。
についてcustom mapping types、私は単一フィールドVO(Decimal
、Point
、Polygon
、...)のために、同様にそれらを使用するのですが、汎用のためにそれらを予約する傾向がある、複数のプロジェクトで使用することができ、再利用可能なタイプ私が上記のアプローチに賛成するプロジェクト特有のシングルフィールドVOのためではありません。