Php 工厂模式应该如何与Slim框架一起使用?
食谱有不同的通用类型,每种通用类型都有不同的方法。数据库查询URL中提供的ID以确定类型,并使用不同的类 一种选择是: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) {
$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正如我所说的,这取决于什么更好,您的问题非常广泛,所以您不能说静态方法总是更好。