Как использовать фабричный шаблон с Slim Framework?

Существуют разные общие типы рецептов, и каждый общий тип имеет свои методы. База данных запрашивает идентификатор, указанный в 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?

0

Решение

Как реализовать фабричный шаблон в Slim Framework?

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

Наличие фактического объекта, а не статических фабричных методов имеет ряд преимуществ:

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector