Как использовать фабричный шаблон с Slim Framework? - PullRequest
0 голосов
/ 28 мая 2018

Существуют разные общие типы рецептов, и у каждого общего типа есть свои методы.База данных запрашивает идентификатор, указанный в URL, чтобы определить тип, и используется другой класс.

Один из вариантов:

$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 голосов
/ 28 мая 2018

Как фабричный шаблон должен быть реализован с помощью Slim Framework?

Зависит от того, что в приведенном вами примере я бы точно выбрал ваше первое решение.

Имеяфактический объект, а не статические фабричные методы, имеет ряд преимуществ:

  • фабрика может быть имитирована внутри тестов
  • она инкапсулирует экземпляр PDO;маршрут не должен знать, что фабрике нужен экземпляр PDO
  • , это согласованно, экземпляр PDO создается контейнером, и для него не используется статическая фабрика

Должны ли статические методы использоваться для фабричного метода?

См. Конструкторы против фабричных методов .

...