【发布时间】:2020-06-17 21:01:20
【问题描述】:
首先,据我所知,DDD 中的实体与值对象几乎相同,只是实体具有标识。我读过的每一篇文章都说实体 id 与任何 ORM 工具都有 ORM 映射。但我不想在 Entity 中使用 ORM 映射。相反,我想在没有映射的情况下使用存储库接口进行数据库操作。而且,在这种情况下,我不知道该怎么做。
我会用下面的例子在脑海中解释
假设我有一个 TODO 应用程序,TODO 中有一些问题,每个问题都有一些答案。
我们有 3 个值对象(或实体): 去做 待办事项 TodoQuestionValue
现在,我认为我有一个 TODO 的值对象(或实体)。这个值对象有一个方法来获取获取 TodoQuestion 值对象数组的问题。在 TodoQuestion 值对象内部,我们有一个方法来获取获取 TodoQuestionValue 数组的问题值。
<?php
class Todo{
private int $id;
/**
* @param array<TodoQuestion> $questions
*/
private array $questions;
private TodoRepositoryInterface $repository;
public function __constructor(TodoRepositoryInterface $repository){
$this->repository = $repository;
}
public function getQuestions(){
$this->questions = $this->repository->listQuestionsByTodoId($this->id);
}
}
<?php
class TodoQuestion{
private int $id;
private string $question;
/**
* @param array<TodoQuestionValue> $values
*/
private array $values;
private TodoRepositoryInterface $repository;
public function __constructor(TodoRepositoryInterface $repository){
$this->repository = $repository;
}
public function getValues(){
$this->values = $this->repository->listValuesByQuestionId($this->id);
}
}
现在,我想听听您对我如何通过遵循 DDD 规则来塑造这个结构的意见。
谢谢。
【问题讨论】:
标签: php orm entity domain-driven-design value-objects