Php 工厂模式应该如何与Slim框架一起使用?

Php 工厂模式应该如何与Slim框架一起使用?,php,slim,static-methods,factory-pattern,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) {

食谱有不同的通用类型,每种通用类型都有不同的方法。数据库查询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框架实现

工厂模式应该如何用Slim框架实现

视情况而定,在你提供的示例中,我显然会使用你的第一个解决方案

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

  • 工厂可以进行内部测试
  • 它封装了PDO实例;路由不能知道工厂需要PDO实例
  • 它是一致的,PDO实例是由容器创建的,不使用静态工厂
工厂方法是否应使用静态方法


请参阅。

谢谢。您引用的其他帖子似乎更喜欢静态方法。@user1032531正如我所说的,这取决于什么更好,您的问题非常广泛,所以您不能说静态方法总是更好。