Kor*_*nik 5 domain-driven-design domain-model doctrine-orm
我正在尝试在具有大量业务逻辑的项目上有效地使用DDD和Doctrine2。
这对我来说是很新的,我正在阅读许多文章和代码示例,以了解DDD的主要原理和实践。
我知道我们需要将域对象与与系统相关的其他概念分离,即在分层体系结构中,“域层”必须与其他层隔离,例如持久层/服务(Doctrine2对我来说)。
但是有一件事对我来说很难理解:在带有doctrine2的ddd的几个代码示例中,域实体中的聚合是使用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;
}
//...
}
Run Code Online (Sandbox Code Playgroud)
对我而言,此实现在域模型和持久性服务 Doctrine2 之间建立了高度的耦合。
另一方面,如果我认为DDD实体和Doctrine实体类是分离的,那么层/类将很多。你怎么看 ?有更好的方法来避免/处理此问题吗?
不要对使用ArrayCollections感到震惊。注意,它在Doctrine / Common名称空间中。它只是一个实用程序数组包装程序,与Doctrine持久层没有特殊联系。您可以轻松地用另一个数组类替换它。
手册解决了这个问题:http : //docs.doctrine-project.org/en/latest/reference/association-mapping.html#collections。向下滚动到:5.12。馆藏
就去耦而言,可以进行DDD建模,同时将自己限制在理论实体的范围内。这是非常有限的,通常不鼓励使用。是的,您可能需要另外一层。
很难证明php中纯DDD实现的开销。
| 归档时间: |
|
| 查看次数: |
1848 次 |
| 最近记录: |