首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDD,Doctrine2,Aggregates和ArrayCollection:如何隔离域模型?

DDD,Doctrine2,Aggregates和ArrayCollection:如何隔离域模型?
EN

Stack Overflow用户
提问于 2013-08-27 08:14:38
回答 1查看 3K关注 0票数 7

我正试图在一个具有大量业务逻辑的项目上有效地使用、DDD、Doctrine2

我理解--我们需要将域对象与与系统相关的其他概念解耦,即在分层体系结构中,“域层”必须与其他层分离,比如持久化层/服务(Doctrine2 )。

但有一件事我很难理解:在一些使用Doctrine 2的DDD代码示例中,域实体中的聚合是用Doctrine ArrayCollection管理的,我发现了这样的代码:

代码语言:javascript
复制
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实体和Doctrine实体类是解耦的,那么在我看来,有很多层/类。

你认为如何?有更好的方法来避免/处理这件事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-27 20:05:12

不要对ArrayCollections的使用感到惊慌。注意,它位于Doctrine/ Notice命名空间中。它只是一个小小的实用程序数组包装器,与Doctrine持久化层没有特殊的联系。您可以轻松地用另一个数组类替换它。

手册解决了这个问题:https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#collections

就解耦而言,可以进行DDD建模,同时将自己限制在理论实体上。这是非常有限的,通常是气馁的。所以是的,你可能需要另一层。

在PHP中很难证明纯DDD实现的开销是合理的。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18460343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档