如何使用DDD实现项目和任务


How can I implement projects and tasks with DDD

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

我想知道在项目实体我应该添加addTask方法或我应该通过TaskController添加任务?当项目实体有addTask方法时,是否需要TaskController ?

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

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

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

文档给出了很好的例子,所以先看一下。

EDIT #2基于注释。

所以,你似乎没有很好地理解这篇文章。你会在你的每个实体中有单独的方法去做你需要的与那个特定实体相关的事情。我不确定你真正想要的方法是什么。

例如,你在注释中给出了两种类型的方法: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.