Ankündigung

Einklappen
Keine Ankündigung bisher.

Object Pool, Service Locator und sonst so?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Object Pool, Service Locator und sonst so?

    Hallo,

    mir will der Unterschied zwischen Object Pool und Service Locator nicht ganz klar werden. Für mich stellt es sich immer so dar, als wäre eine Registry völlig ausreichend.

    Kann mir da jemand weiterhelfen die beiden Pattern zu verstehen und was deren Vorteile gegenüber der Registry ist?

    Ein Einsatzgebiet als Beispiel wäre sogar super!


  • #2
    Die Sachen überschneiden sich ganz oder teilweise für mich.

    Der Service locator zB KANN ein Objekt Pool sein, der locator selbst IST für mich eine Registry.

    Kommentar


    • #3
      Ganz genau. Das sehe ich auch so.

      Ein Locator ist eine Registry und somit wirkt der Service Locator hinfällig.
      Ein ObjectPool kann auch über eine Registry realisiert werden.

      Aber trotzdem spricht jeder drüber und es gibt diese Pattern überall.

      Kommentar


      • #4
        Ein Service Locator impliziert ein Interface das der Anwendung bereitgestellt wird, ein ObjectPool instanziiert und hält Instanzen wenn eine Instanz bestellt oder zurückgegeben wird.

        Ein simples Beispiel für ein Object Pool ist Pimple. Ein in Verbindung stehendes Beispiel für einen Service Locator ist das Service Provider Interface von Silex. Deren Objekte / Dienste über ein und das selbe Interface in den Object Pool der Anwendung als Folge von lazy oder eager loading injiziert ( je nach dem was der Service an die Anwendung weitergibt ).
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          War gemeint, dass ein Service Locator ein Interface hat, das es ein bestimmtes Interface bei den Argumenten nutzt oder das die Rückgabe ein bestimmtes Interface immer besitzt?

          Sehe ich das also richtig, dass ein Service Locator ein Object Pool mit Interface (bei Eingabe oder Rückgabe) ist?
          Und ein Object Pool am Ende nur eine Art von Registry?

          Kommentar


          • #6
            Zitat von rmp Beitrag anzeigen
            War gemeint, dass ein Service Locator ein Interface hat, das es ein bestimmtes Interface bei den Argumenten nutzt oder das die Rückgabe ein bestimmtes Interface immer besitzt?
            Ersteres, wenn man es mit der Abstraktion ausreizt auch zweiteres.

            Zitat von rmp Beitrag anzeigen
            Sehe ich das also richtig, dass ein Service Locator ein Object Pool mit Interface (bei Eingabe oder Rückgabe) ist?
            Und ein Object Pool am Ende nur eine Art von Registry?
            Ich verwirr dich jetzt mal: Ein Service Locator kann einen Object Pool als Registry verwenden.
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar


            • #7
              Zitat von tr0y Beitrag anzeigen
              Ein Service Locator kann einen Object Pool als Registry verwenden.
              This is what I said

              Naja, so ähnlich...

              Kommentar


              • #8
                Tut mir leid, ich muss das leider so hinnehmen.
                Leider sehe ich im Rahmen von PHP nicht, was ein Service Locator oder ein Object Pool kann, dass eine Registry nicht kann.
                Vielen Dank für die Ansätze, vielleicht kommt eines Tages der Geistesblitz.

                Kommentar


                • #9
                  Zitat von rmp Beitrag anzeigen
                  Tut mir leid, ich muss das leider so hinnehmen.
                  Leider sehe ich im Rahmen von PHP nicht, was ein Service Locator oder ein Object Pool kann, dass eine Registry nicht kann.
                  Vielen Dank für die Ansätze, vielleicht kommt eines Tages der Geistesblitz.
                  Nunja wichtiger ist das du verstehen solltest wozu man Object Pools verwendet und wann und wozu Service Locator verwendet werden sollten.

                  Object Pools halten Instanzen. Bei der Nutzung von Object Pools geht es primär um die Wiederverwendung von bestehenden Instanzen. Wobei Service Locator primär diese Instanzen Initialisieren falls sie nicht vorhanden sind und sie initialisiert werden können oder vorhandene Instanzen mit neuen Instanzen ersetzen. Wiederverwendung der bestehenden Instanzen ist bei Service Locator nicht das Hauptziel.

                  Object Pools sind aber im Webserver Kontext, also in dem Anwendungsfall wo Objekte die Skriptlaufzeit nicht überleben, wenig Sinnig, ähnlich den Singletons. Im Daemon- oder allgemein im CLI-Kontext oder in der Desktop-Anwendungsentwicklung sieht das ganze schon anders aus, dort steigt die Möglichkeit der Langlebigkeit von Objekten. Sogar Singletons erreichen dort mehr Sinn als im Webserver-Kontext.

                  Wichtig hier: Object Pools in der Entwicklung meinen Mechaniken die das Object Pool Pattern verfolgen. Reine "Objekt Sammlungen", entsprechen einer Registry. Eine Registry empfängt allerdings mehr als Objekte, sie kann jeden Typ speichern, nicht nur Objekte.

                  Service Locator kümmern sich um die Verfügbarkeit einer funktionierenden Instanz eines Services. Liegt dieser Service nicht vor wird er instanziiert und initialisiert. Ein Server Locator empfängt keine Instanzen, er erfüllt die Aufgabe diese vorzubereiten, zu erzeugen und zu initialisieren.

                  Service Locator nutzen Mechanismen zum festhalten der Instanzen, das kann ein Object Pool sein, der aber gleichzeitig auch die Mechanik / die Möglichkeiten des Service Locators einschränken kann oder es kann eine Registry sein, die gleichermaßen Instanzen und Initialisierungsdaten festhält.
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar


                  • #10
                    Leider sehe ich im Rahmen von PHP nicht, was ein Service Locator oder ein Object Pool kann, dass eine Registry nicht kann.
                    - Ein Service Locator sorgt für die Instanziierung eines Objekts und hält die Instanzen
                    - Ein Object Pool bekommt zu einem bestimmten Zeitpunkt (z. B. beim Start eine Applikation) fertig instanziierte Objekte und hält diese dann vor und ist damit vergleichbar mit einer Registry, nur dass es einen bestimmten Zweck hat.

                    Kommentar


                    • #11
                      Zitat von tr0y Beitrag anzeigen
                      Nunja wichtiger ist das du verstehen solltest wozu man Object Pools verwendet und wann und wozu Service Locator verwendet werden sollten.

                      Object Pools halten Instanzen. Bei der Nutzung von Object Pools geht es primär um die Wiederverwendung von bestehenden Instanzen. Wobei Service Locator primär diese Instanzen Initialisieren falls sie nicht vorhanden sind und sie initialisiert werden können oder vorhandene Instanzen mit neuen Instanzen ersetzen. Wiederverwendung der bestehenden Instanzen ist bei Service Locator nicht das Hauptziel.

                      Object Pools sind aber im Webserver Kontext, also in dem Anwendungsfall wo Objekte die Skriptlaufzeit nicht überleben, wenig Sinnig, ähnlich den Singletons. Im Daemon- oder allgemein im CLI-Kontext oder in der Desktop-Anwendungsentwicklung sieht das ganze schon anders aus, dort steigt die Möglichkeit der Langlebigkeit von Objekten. Sogar Singletons erreichen dort mehr Sinn als im Webserver-Kontext.

                      Wichtig hier: Object Pools in der Entwicklung meinen Mechaniken die das Object Pool Pattern verfolgen. Reine "Objekt Sammlungen", entsprechen einer Registry. Eine Registry empfängt allerdings mehr als Objekte, sie kann jeden Typ speichern, nicht nur Objekte.

                      Service Locator kümmern sich um die Verfügbarkeit einer funktionierenden Instanz eines Services. Liegt dieser Service nicht vor wird er instanziiert und initialisiert. Ein Server Locator empfängt keine Instanzen, er erfüllt die Aufgabe diese vorzubereiten, zu erzeugen und zu initialisieren.

                      Service Locator nutzen Mechanismen zum festhalten der Instanzen, das kann ein Object Pool sein, der aber gleichzeitig auch die Mechanik / die Möglichkeiten des Service Locators einschränken kann oder es kann eine Registry sein, die gleichermaßen Instanzen und Initialisierungsdaten festhält.
                      Man könnte die Object Pools aber persistieren und somit länger, und auch über die Skriptlaufzeit, verfügbar machen. Das gleiche könnte man auch mit Singletons machen
                      PHP-Code:
                      if(!$user->writesCleanCode()) { die(); } 

                      Kommentar


                      • #12
                        Jo, wenn man lange genug am Schaf zieht, wirds ne Kuh.
                        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                        Kommentar


                        • #13
                          Zitat von tr0y Beitrag anzeigen
                          Jo, wenn man lange genug am Schaf zieht, wirds ne Kuh.
                          das stimmt natürlich - prinzipiell wäre die Implementierung aber auch im Webserver Kontext möglich - ob es überhaupt notwendig ist, ist eine andere Frage (Datenobjekte wie z.B. ein User-Objekt werden eh persistiert und bei Bedarf über das Model direkt geladen)
                          PHP-Code:
                          if(!$user->writesCleanCode()) { die(); } 

                          Kommentar

                          Lädt...
                          X