多くのビジネス ロジックを含むプロジェクトで、DDDとDoctrine2を効果的に使用しようとしています。
システムに関連する他の概念からドメイン オブジェクトを分離する必要があることを理解しています。
しかし、私には理解しがたいことが 1 つあります。Doctrine 2 を使用した DDD のいくつかのコード例では、ドメイン エンティティの集約は Doctrine ArrayCollectionで管理されています。この種のコードを見つけました。
namespace Acme\Domain\Model\Users;
use Doctrine\Common\Collections\ArrayCollection;
class User {
     //...
    /**
    * Collection of Roles
    *
    * @var Collection of Roles
    */
    protected $roles;
    /**
    * Constructor.
    */
    public function __construct()
    {
        $this->createdAt = new \DateTime();
        $this->roles = new ArrayCollection();
    }
    public function getRoles()
    {        
        return $this->roles;
    }
//...
}
私にとって、この実装はドメイン モデルと永続化サービスDoctrine2 の間の高い結合を作成します。
一方、DDD Entity と Doctrine Entity クラスが分離されている場合、私の意見では、多くのレイヤー/クラスが存在します。
どう思いますか?これを回避/処理するより良い方法はありますか?