0
如果这些实体需要构造参数,如何执行将实体依赖注入到存储库中?如何执行依赖将实体注入到存储库中,如果这些实体需要构造参数?
拿这个简单的例子中(PHP,但问题是语言无关):
Person实体
class Person
{
private $firstName = "";
private $middleName = "";
private $lastName = "";
private $dateOfBirth;
private $dateOfDeath;
public function __construct($firstName, $middleName = "", $lastName)
{
$this->firstName = $firstName;
$this->middleName = $middleName;
$this->lastName = $lastName;
// Validation
if(empty($this->firstName) || empty($this->lastName){
throw new Exception("first and last name required");
}
}
// ...
}
人库
class PersonRepository
{
public function __construct(Person $person) // <-- problem, need required arguments
{
$this->person = $person;
}
public function fetchById($id)
{
// Query database
// ...
// Hydrate and return a person object
// ...
return $person;
}
// ...
}
所以我缺少什么?注入实体并避免在存储库中使用new
运算符的标准方法是什么?
反射通常用于实体可以实例化而不调用业务构造函数,然后通过反射设置每个私有字段。然而在你的情况下,为什么你不能返回'新人(dataset.firstName,...)'? – plalx
看看Doctrine 2如何做到这一点。从数据库保湿时,构造函数永远不会被调用。是的,它使用反射来完成任务。 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/getting-started.html – Cerad
为什么要在存储库构造函数中注入一个'Person'? –