У меня есть классы репозитория, которые реализуют те же контракты и шаблон, поэтому в основном у меня есть несколько таких:
class EmployeeRepository {
private $transformer; //instance of EmployeeTransformer
public function find() {
return new ReturnObject($this->transformer, $employee);
}
}
class CustomerRepository {
private $transformer; //instance of CustomerTransformer
public function find() {
return new ReturnObject($this->transformer, $customer);
}
}
как вы можете видеть, они все возвращают ReturnObject, который в основном принимает объект преобразователя и объект сущности в качестве параметров конструктора. Преобразователь используется для объекта ReturnObject для определения выходного формата для классов контроллера.
class ReturnObject {
private $transformer;
private $response;
function __construct($transformer, $entity) {
$this->transformer = $transformer;
$this->entity = $entity;
$this->response = new ApiResponse();
}
public function apiResponse() {
return $this->response->array($this->transformer, $entity);
}
}
Мой вопрос касается параметра конструктора для трансформатора. Есть ли способ для репозиториев иметь возможность передавать правильный класс преобразователя в ReturnObject, не отправляя его в качестве параметра конструктора? Может быть, с фабричным дизайном?
Есть две причины, по которым я хочу удалить аргумент из конструктора:
Конструктор уже имеет много аргументов. (Я удалил их из моих примеров выше, чтобы сделать код проще для понимания, но на самом деле в конструкторе уже есть 6 параметров, кроме преобразователя)
У меня есть много репозиториев с большим количеством функций, и было бы замечательно, чтобы не нужно было отправлять преобразователь во всех возвратах, чтобы уменьшить код и потенциально ошибки
Задача ещё не решена.
Других решений пока нет …