【发布时间】:2016-03-13 00:41:42
【问题描述】:
我一直在阅读有关领域驱动设计的内容,并且实体不应该有设置器。在构造函数中传递属性是有意义的,因此对象是实心的。有没有办法在这种做法中使用 Doctrine ORM?
class User
{
private $firstname;
public function __construct($firstname)
{
$this->firstname = $firstname;
}
}
Doctrine 如何处理这种设置?有什么缺点吗?
【问题讨论】:
-
它会工作得很好。 Doctrine 在对数据库中的对象进行水合时不使用构造函数,因此不会发生冲突。唯一的问题是如何从表单输入中更新实体。
-
@Cerad,您知道如何在没有设置器的情况下更新现有实体吗?我尝试了
em->persist(),但它不起作用(id 约束)并且em->merge()已被弃用。 -
@Kwadz 过去的爆炸。不确定你的问题是什么。最好打开一个新问题。这个特定的问题犯了一个常见的错误,即 DDD 实体与 Doctrine 实体相同。它们实际上是两种截然不同的生物。如果您有更新 Doctrine 实体的冲动,请使用 setter 或使用公共属性。
标签: php doctrine-orm domain-driven-design