有不同的一般类型的食谱,每种一般类型有不同的方法。数据库查询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实现工厂模式?
答案 0 :(得分:0)
如何使用Slim Framework实现工厂模式?
这取决于你提供的例子,我会清楚地看到你的第一个解决方案。
拥有一个实际的对象而不是一个静态的工厂方法有几个好处:
是否应该将静态方法用于工厂方法?