我正在努力理解使用 Doctrine 2 在来自不同有界上下文的两个实体之间实现关联映射的正确方法。假设有两个分别属于“用户”和“内容”有界上下文的“用户”和“发布”实体. “内容”上下文中还有一个“用户”概念,它通过多对一关联确定“帖子”的作者。因此,“内容”上下文中的“用户”只是一个包含用户 ID 的值对象。
我的问题是我应该如何使用 Doctrine 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 规则。第二种解决方案尊重 DDD 规则,但会影响数据库模式(通过外键约束删除“用户”和“帖子”表之间的数据库级关系)。
那么,实施此类关联的正确方法是什么?