【问题标题】:Doctrine Mapping DDD : Two or Many Entity to One Table Mapping on One Entity ManagerDoctrine Mapping DDD:一个实体管理器上的两个或多个实体到一个表的映射
【发布时间】:2015-04-16 21:21:05
【问题描述】:

我正在关注 DDD,并且我有一个包含营销人员和编码器实体的查询上下文。基本上两者具有相同的数据(他们是系统的用户),但不同的逻辑(基于域)。我不想应用 SINGLE TABLE INHERITANCE(它会添加一个鉴别器列),因为该表将在另一个上下文中使用。

在我的代码中,营销人员有 PersonName 值对象和 FOSUserBundle 用户

/**
 * Class Marketer
 * @package Elite\Model\Inquiry
 */
class Marketer
{

    private $userAccount;
    private $name;

    public function __construct(IdentityUser $userAccount, PersonName $name)
    {
        $this->userAccount = $userAccount;
        $this->name = $name;
    }
}

/**
 * The receiver of the inquiry
 * @package Elite\Model\Inquiry
 */
class Encoder
{
    public function __construct(IdentityUser $userAccount, PersonName $name)
    {
        parent::__construct($userAccount, $name);
    }

    /**
     * Make an inquiry for the inquirer
     *
     * @param Inquirer $inquirer The inquirer
     *
     * @param Marketer $marketer The marketer to be assigned to follow up
     * @param \DateTime $date The date of inquiry
     * @return Inquiry The inquiry
     */
    public function makeInquiry(Inquirer $inquirer, Marketer $marketer, \DateTime $date)
    {
        return new Inquiry($inquirer, $this->userAccount, $marketer, $date);
    }
}

如何将两个实体映射到一张表上?

有没有比我现在更好的设计?

Inquiry 是否需要在其构造函数中包含 Encoder?

我应该在编码器之外实例化查询吗?并将 FOSUSer 的实例传递给 INquiry?

【问题讨论】:

    标签: database-design orm doctrine-orm domain-driven-design


    【解决方案1】:

    我推荐阅读 Eric Evans 的“领域驱动设计”和 Vaughn Vernon 的“实施领域驱动设计”这两本书。 DDD 与数据无关。那么您确定营销人员和编码器真的属于同一个有界上下文甚至聚合,特别是如果他们是关于该用户的系统用户并且授权通常是一个单独的有界上下文?否则使用值对象来表示营销者和编码器。仅在真正需要时使用实体(如果值发生变化则保持身份)。并将它们与书中的标准方法之一结合到用户上下文中的用户。

    回答您关于一张表的问题:在 DDD 中与您的“共享表”最匹配的是“共享内核”。但在更复杂的场景中,它被认为是一个糟糕的选择,只能谨慎使用。如果用户、营销人员和编码器最终处于不同的有界上下文中,那么它们应该存储在不同的表中,因为每个有界上下文都有自己的数据存储(至少在我对 DDD 的理解中)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      相关资源
      最近更新 更多