繁体   English   中英

实体内部的DDD和原则映射

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM