Komentáře k článku

Dependency Injection: kontejner

V ukázkách jednotlivých typů DI v minulém dílu seriálu byly objekty vždy sestavovány manuálně. Kód potřebný pro sestavování je ale obdobný pro všechny případy, a tak tuto práci můžeme u Dependency Injection přenechat tzv. kontejneru, kterému pouze poskytneme konfiguraci. Ukažme si, jak s ním pracovat.

Zpět na článek

7 komentářů k článku Dependency Injection: kontejner:

  1. f4s

    konfigurace

    Díky za článek, zajimalo by mne jak se resi konfigurace pokud budu v aplikaci mit 2x Cache ale jednou ji chci poslat MemoryStorage a podruhe FileStorage.

    1. Vsehomir

      Re: konfigurace

      Dve rozne konfiguracie jednu s FileStorage a jednu s MemoryStorage? Co potom s duplicitou, keby slo o triedu tak na spolocnu cast by sa dal pouzit trait, ked ide o subor, dalo by sa spravit includovanie, ale zas to bude neprehladne … no vyber si. :)

      1. f4s

        Re: konfigurace

        Spatne jsem se vyjadril, uvedu priklad:

        class Cache {
          private $storace;
          function __construct(Storage $storage) {
            $this->storage = $storage;
          }
          /** ... */
        }
        
        class FileStorage implements Storage {
          /*..*/
        }
        
        class MemoryStorage implements Storage {
          /*..*/
        }

        A ted chci aby se cache pro napr. obrazky ukladala do souboru:

        $imageCache = new Cache(new FileStorage);

        Informace treba o necem jinem, ale uz nechci do souboru, nebot se v pohode v lezou do pameti:

        $configCache = new Cache(new MemoryStorage);

        Pokud by mne toto mel vracet nejaky kontainer, jak to vyresit ?

        $imageCache = $container->getService("cache");
        $configCache = $container->getService("cache");
        1. Cechjos

          Re: konfigurace

          Jde o různé služby, i když se vytváří ze stejné třídy. Stačí je tedy pojmenovat služby více konkrétně — třeba image-cache, config-cache.

  2. anonym

    Re: Dependency Injection: kontejner

    jak by se modelovala v UML závislost třídy na rozhraní? Tedy že třída A používá (v konstruktoru předanou podle DI) něco, co implementuje rozhraní B?

    1. anonym

      Re: Dependency Injection: kontejner

      zkusím to upřesnit: v UML v class diagramu.

      Třída A má asociaci na rozhraní B, to je implementováno C. Pokud to budu modelovat přesně takhle, vznikne docela komplikovaná struktura. Leda to pro přehlednost řešit v odděleném diagramu :-/

Napsat komentář

Tato diskuse je již příliš stará, pravděpodobně již vám nikdo neodpoví. Pokud se chcete na něco zeptat, použijte diskusní server Devel.cz

Zdroj: https://www.zdrojak.cz/?p=3516