[英]DDD and Doctrine mapping inside Entity
我想在域驱动设计方法中使用Doctrine进行数据持久化。 但是令我困扰的是,关联映射应该在实体内部。 就纯DDD而言,这不是不好的做法吗? 因为在我遇到持久性问题之前,我的域实体非常干净,现在它们的属性中有很多注释。 像这样:
<?php
namespace Domain\Model;
use Doctrine\ORM\Mapping as ORM;
/**
* User
*
* @ORM\Table(name="user")
* @ORM\Entity
*/
class User
{
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="SEQUENCE")
* @ORM\SequenceGenerator(sequenceName="user_id_seq", allocationSize=1, initialValue=1)
* @ORM\Column(type="integer")
*/
private $id;
...
除了使用这些注释,我还必须将use Doctrine\\ORM\\Mapping as ORM;
。 这样,基础架构就不会与域分开。
有什么方法可以将此映射移动到配置文件吗? 我正在使用ZF2。
是的,从DDD的角度来看,这是不好的。 有两种解决方案:
使用外部映射机制,例如@Cerad描述的那种。 这使域模型摆脱了持久性问题的困扰,但是管理起来也很痛苦。 毕竟,由于某种原因,许多项目都放弃了基于XML的持久性配置。
创建一个单独的持久性模型。 该模型非常简单,根本不包含逻辑,仅包含数据。 然后,创建一个映射器以在两者之间映射。
洋葱架构解决了您的问题,是DDD推荐的架构方法之一。 我保留域层的想法仅包含业务逻辑。 基础结构层将具有存储库。 存储库的工作是保留域对象中所做的更改。 因此,如果您使用的是ORM,则这是您应该维护映射的层。 这是一篇有关如何在DDD中实施存储库的好文章 ,希望对您有所帮助,
https://codingcraft.wordpress.com/2015/10/12/implementing-repository-in-ddd-part-1/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.