如何将工厂模式与Slim Framework一起使用?

时间:2018-05-28 12:48:29

标签: php slim static-methods factory-pattern

有不同的一般类型的食谱,每种一般类型有不同的方法。数据库查询URL中提供的ID以确定类型,并使用不同的类。

一个选项是:

$c['recipeFactory'] = function ($c) {
    return new RecipeFactory($this->get('pdo'));
};

$app->put('/recipes/{id:[0-9]+}', function (Request $request, Response $response, $args) {
    //Factory will query DB and create and return object
    $obj=$this->recipeFactory->create($args['id']);
    $obj->update($request->getParsedBody());
});

似乎经常使用静态方法来实现工厂,所以也许我应该执行以下操作:

$app->put('/recipes/{id:[0-9]+}', function (Request $request, Response $response, $args) {
    $obj=RecipeFactory::create($args['id'], $this->get('pdo'));
    $rs=$obj->update($request->getParsedBody());
});

但是,我没有使用容器,但以下内容不能用作未定义的$args['id']

$c['recipeFactory'] = function ($c) {
    return new RecipeFactory($args['id'], $c->get('pdo')); 
};

是否应该将静态方法用于工厂方法?

如何使用Slim Framework实现工厂模式?

1 个答案:

答案 0 :(得分:0)

  

如何使用Slim Framework实现工厂模式?

这取决于你提供的例子,我会清楚地看到你的第一个解决方案。

拥有一个实际的对象而不是一个静态的工厂方法有几个好处:

  • 工厂可以mocked内部测试
  • 它封装了PDO实例;路线必须不知道工厂需要PDO实例
  • 它是一致的,PDO实例是由容器创建的,没有使用静态工厂
  

是否应该将静态方法用于工厂方法?

请参阅Constructors vs Factory Methods