4

Doctrine 2 を使用して、異なる境界付けられたコンテキストからの 2 つのエンティティ間の関連付けマッピングを実装する正しい方法を理解するのに苦労しています。「User」および「Content」境界付けられたコンテキストにそれぞれ属する 2 つの「User」および「Post」エンティティがあるとします。 . 多対一の関連付けを通じて「投稿」の作成者を決定する「コンテンツ」コンテキストには、「ユーザー」の概念もあります。したがって、「コンテンツ」コンテキストの「ユーザー」は、ユーザー ID を含む単なる値オブジェクトです。

私の質問は、Doctrine 2 を使用してこの関連付けをどのように実装すればよいですか? どちらにも独自の問題がある2つのソリューションがあります。

解決策 1 :

/**
 * @ORM\Entity
 * @ORM\Table(name="posts")
 * @ORM\HasLifecycleCallbacks()
 */
 class Post
 {
    ...

    /**
     * @ORM\ManyToOne(targetEntity="UserBC\User", inversedBy="posts")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;

    ...
 }

解決策 2 :

/**
 * @ORM\Entity
 * @ORM\Table(name="posts")
 * @ORM\HasLifecycleCallbacks()
 */
 class Post
 {
    ...

    /**
     * @ORM\Column(type="integer")
     */
    private $user_id;

    ...
 }

最初のソリューションでは、「ユーザー」コンテキストの「ユーザー」エンティティが「コンテンツ」コンテキスト内で使用されており、BC が互いに独立しているという DDD ルールに違反しています。2 番目の解決策は、DDD ルールを尊重しますが、データベース スキーマに影響を与えます (外部キー制約により、"users" テーブルと "posts" テーブルの間のデータベース レベルの関係を削除します)。

では、そのような関連付けを実装する正しい方法は何でしょうか?

4

2 に答える 2