我正在尝试在具有大量业务逻辑的项目中有效地使用DDD和Doctrine2。
我知道我们需要将域对象与与系统相关的其他概念解耦,即在分层架构中,“域层”必须与其他层隔离,例如持久层/服务(对我来说是 Doctrine2)。
但是有一点对我来说很难理解:在 DDD 与 Doctrine 2 的几个代码示例中,域实体中的聚合是用 Doctrine 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 类是解耦的,我认为会有很多层/类。
你怎么看?有没有更好的方法来避免/处理这个?