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'? –