我正在尝试与DDD和Doctrine2有效地合作,这个项目有很多业务逻辑。DDD,Doctrine2,Aggregates和ArrayCollection:如何隔离域模型?
这对我来说很新颖,我读了很多文章和代码示例来了解DDD的主要原理和实践。
我明白我们需要去耦域从与系统中的其它概念对象, 即,在分层体系结构“的域层”必须是从其它层隔离,如持久层/服务(Doctrine2为了我)。
但有一两件事,很难理解我:在doctrine2 DDD的几个代码示例,聚集域实体与学说的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类是分离的,在我看来,有很多层/类。 你觉得呢?有没有更好的方法来避免/处理这个问题?
您提到了“许多业务逻辑”。考虑开始一个新问题,重点关注一个您认为可能从DDD中受益的业务规则。 – Cerad