Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF]Dlaczego usługę dekorować fabryką w Extension?
Forum PHP.pl > Forum > PHP > Frameworki
koszykarze
w FOSElasticaBundle w Extension jest taki fragment

  1. $Def = new DefinitionDecorator('foo');
  2. $Def->replaceArgument(0, $bar);
  3. $Def->addTag('baz', array( 'name' => $qux, ));
  4. $Def->setFactory(array(new Reference('quux'), 'corge'));


czyli w yaml wyjdzie coś takiego

  1. services:
  2. foo:
  3. arguments:
  4. - '$bar'
  5. tags:
  6. - { name: baz }
  7. factory: ["@quux", corge]


dlaczego zamiast factory nie jest użyta dyrektywa class i calls?
  1. services:
  2. foo:
  3. arguments:
  4. - '$bar'
  5. tags:
  6. - { name: baz }
  7. class: @quux
  8. calls: corge

Czy to wszystko jedno czy jest w tym jakiś sens?
Crozin
Patrząc bardzo szybko na skrawek kodu:
1. Co jeżeli wartość $bar ($indexName w oryginalnym kodzie) jest nieco trudniejsza do ustalenia - wymaga jakiejś logiki? Tak jest w tym przypadku.
2. Dlaczego użyta jest fabryka? Zobacz na jej kod (https://github.com/FriendsOfSymfony/FOSElasticaBundle/blob/5f09daac95cfad96a99867c064e396d24f743567/Elastica/Client.php#L68), jest tam zawarta dodatkowa logika, której nie powinno raczej być bezpośrednio w konstruktorze.
3. Być może dałoby się to jakoś obejść by zachować czysty zapis w XML/YAML, ale... po co? Tak kod jest prosty i zrozumiały.
koszykarze
nie chodzi mi o to dlaczego serwis nie jest zdefiniowany w yaml a php. (napisałem w yaml żeby uprościć)

Mi chodzi o to dlaczego jest użyte factory zamiast class i calls przy konstrukcji tego dekoratora (jakkolwiek te dyrektywy się definiuje w php).

Cytat(Crozin @ 27.07.2016, 07:42:58 ) *
jest tam zawarta dodatkowa logika, której nie powinno raczej być bezpośrednio w konstruktorze.

ja nie mówię o konstruktorze a o calls.


po prostu zastanawiałem się czy 1) chcąc nadpisać wywoływaną metodę usługi w Extension muszę to robić z użyciem factory i czy 2) chcąc nadpisać usługę dodając dyrektywę factory muszę najpierw użyć dekoratora

Czy nie można by 1) nadpisać tag, klasę, calls, i arguments z użyciem dekoratora bez factory i czy nie można by 2) nadpisać tag, klasę, calls, i arguments z użyciem factory bez dekoratora

Czy dekorator i faktory są ze sobą związane przy nadpisywaniu usług w Extension.
destroyerr
factory i calls to są dwie różne rzeczy. Factory tworzy Twój obiekt, a calls wywołuje funkcje na tym utworzonym obiekcie. Możesz fabryką utworzyć obiekt a potem wywołać na nim metodę.
koszykarze
[sql][/sql]
Cytat(destroyerr @ 27.07.2016, 18:56:14 ) *
factory i calls to są dwie różne rzeczy. Factory tworzy Twój obiekt, a calls wywołuje funkcje na tym utworzonym obiekcie. Możesz fabryką utworzyć obiekt a potem wywołać na nim metodę.

zrobiłem z tego kodu "foo, bar, baz" by zrobić generalne pytanie a nie napisałem, że w rzeczywistym kodzie ta metoda factory zwraca tablicę stąd moje dociekania czy dekorator musi używać faktory do nadpisywania usług.

Dobra, rozumiem że to wszystko jedno, po prostu autorowi chciało się factory użyć tym razem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.