根据被调用者动态地向构造函数添加正确的类

时间:2016-02-02 13:49:07

标签: php constructor repository code-reuse

我有实现相同合同和模式的存储库类,所以基本上我有一堆theese:

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);
      }
}

我的问题是关于变压器的构造函数参数。有没有办法使repositor能够将正确的转换器类传递给ReturnObject而不必将其作为构造函数参数发送?也许有工厂模式设计? 我想从构造函数中删除参数有两个原因:

  1. 构造函数已经有很多参数。 (我已从上面的示例中删除它们,以使代码更易于理解,但实际上除了变换器之外,构造函数已经有6个参数)

  2. 我有很多具有很多功能的存储库,并且不必在所有返回中发送变换器以减少代码和潜在的错误

0 个答案:

没有答案