Как сделать Dependency Injection сущностей в хранилище, если у этих сущностей есть аргументы для построения?

Как мне сделать Dependency Injection сущностей в хранилище, если у этих сущностей есть аргументы для построения?

Возьмите этот простой пример (в PHP, но вопрос не зависит от языка):

Персона

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 оператор в репозитории?

0

Решение

Читайте о «Абстрактной фабрике». Это шаблон.

class PersonRepository
{
public function __construct(PersonFactory $factory){
$this->personFactory = $factory;
}

public function getById($id)
{
// ...
return $this->personFactory->create($row['name'], $row['surname'], ...);
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector