2011-12-09 6 views
8

Doctrine 2では、値オブジェクトをカスタムDBAL型として実装していますが、問題なく動作しています。しかし、私はこれが最善の方法であるかどうか疑問に思っています。 Post Loadリスナーを使用して値オブジェクトをインスタンス化することについて考えました。また、要求されたときにEntityアクセサを介してインスタンス化すると、後者の利点は、必要以上のオブジェクトをインスタンス化しないということです。Doctrine 2値オブジェクト

私の質問です:どの方法が最適ですか?それとももっと良い方法がありますか?上記の問題が発生しているか不合理なものがありますか?

答えて

8

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(DecimalPointPolygon、...)のために、同様にそれらを使用するのですが、汎用のためにそれらを予約する傾向がある、複数のプロジェクトで使用することができ、再利用可能なタイプ私が上記のアプローチに賛成するプロジェクト特有のシングルフィールドVOのためではありません。

関連する問題