【发布时间】: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