【问题标题】:How can I implement projects and tasks with DDD如何使用 DDD 实施项目和任务
【发布时间】:2016-08-29 16:14:26
【问题描述】:

我有两个实体:项目和任务。我可以将此对象实现为值对象,但我想知道这是否是好方法?任务可能会更改自己的标题或状态,并且 VO 应该是不可变的。这个对象是怎么实现的?

我想知道我应该添加 addTask 方法还是应该通过 TaskController 添加任务?当 Project 实体有 addTask 方法时是否需要 TaskController?

【问题讨论】:

    标签: php domain-driven-design symfony


    【解决方案1】:

    阅读有关教义关联/关系的文档: http://symfony.com/doc/current/doctrine/associations.html

    它应该解释你需要做什么。

    基本上,您的项目实体应该有一个 addTask() 方法,您可以在其中添加任务。您的项目将有一个 ArrayCollection 任务。然后你可以使用 getTask() 方法(你创建这个)来获取任务(如果你需要的话)。

    文档提供了很好的示例,因此请先了解一下。

    EDIT #2 基于 cmets。

    所以,您似乎不太了解这篇文章。您将在每个实体中使用单独的方法来执行与该特定实体相关的所需操作。我不确定你真正想要什么方法。

    例如,您在 cmets 中提供了两种类型的方法:changeTask 和 changeNameTask。

    在您的代码中,您可以执行以下操作:

    $project = new Project();
    $task1 = new Task();
    $task1->setName("My Task Name");
    ... // Do other things with task1
    
    $project->addTask($task1);
    
    $em = $this->getDoctrine()->getManager();
    $em->persist($project); // Save to db.
    $em->persist($task1);
    $em->flush();
    
    // Now let's add a new Task (different name).
    $task2 = new Task();
    $task2->setName("Another Task");
    ...
    
    $project->addTask($task2);
    
    // Remove the old Task...
    $em->remove($task1);
    $em->persist($project); // Save to db.
    $em->persist($task2);
    $em->flush();
    
    // You can also get the Task if you need it.
    $task2 = $project->getTask();   // Presumes that this is an object not an array.
    

    以上应该是有道理的......

    【讨论】:

    • Okej,但是否有 TaskController ?是否在项目实体中添加方法 changeTask 或 changeNameTask?有必要吗?
    • 我会使用值对象,但我想知道当我通过 Doctrine 获取记录时(对象没有设置器)如何更改名称对象?
    • 你好,Matrix12。我根据您的 cmets 中的反馈编辑了我的帖子。
    • 感谢您的回答。祝你有美好的一天!
    • 我有一个问题。我有几个捆绑包,我想知道如何实现结构目录。我认为创建目录、应用程序、基础设施、演示文稿、域。我是否应该将实体 UserBundle、ProjectBundle 放置到域,但它们是控制器的演示文稿?还是不创建每个捆绑包只将所有实体放置到域目录?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 2021-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多