Ankündigung

Einklappen
Keine Ankündigung bisher.

Kommunikation zwischen Modulen

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

  • Kommunikation zwischen Modulen

    Hallo.

    Das ist eine reine Konzeptfrage und hat nicht wirklich was mit PHP an sich zu tun.

    Und zwar haben wir einen Firmen Core, in dem alles untergebracht ist was so oder so immer zur Verfügung stehen muss, egal was der Kunde für Module buchen möchte.

    Auf diesen Core können nun, je nach Kunden Anforderung, diverse Module, oder auch nur eins aufgesteckt, bzw aktiviert werden.

    Jetzt kann es aber den Fall geben das Module miteinander in Kummunikation stehen sollen / müssen und da versuche ich gerade den richtigen Weg zu finden.

    Gedanke 1.) Ich schalte Mediatoren zwischen die Module und die Kommunikation etc. findet ausschließlich nur über diesen Mediator statt.

    Gedanke 2.) Ein ausgelagertes Event (Modul / Service) welcher über Events verfügt und über die Logik in den Event Klassen / Methoden die Kommunikation stattfindet.

    Eignen sich beide Gedanken für diesen Zweck, wenn ja welchen würdet ihr dafür bevorzugen?

    Oder habe ich eventuell eine oder mehrere Möglichkeiten gar nicht in Betracht gezogen und übersehen / vergessen?

    Es soll gewährleistet sein das die Module sich untereinander nicht kennen und unabhängig voneinander sein sollen.

    Ich danke euch für eure Ideen und Antworten.

    Gruß der Litter
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    http://www.lit-web.de


  • #2
    Gedanke 1 und 2 klingen für mich gleich. Damit Events funktionieren, brauchst du ein Event Dispatcher, im Gedanke 1 hast du ihn eben Mediator gennant.

    Ich nutze überall Events und hatte bisher nie Probleme, man muss nur aufpassen, dass man die Events vielleicht in eine Warteschlange packt und ein Worker die dann abarbeitet. Wir hatten das Problem, dass viele Module bei jedem Event aufruf dann dinge ausgeführt hatten.

    Sprich User ist auf Seite, drückt auf Button event wird getriggered, der Dispatcher benachrichtig alle Subscriber und die Subscriber tun dann ihre dinge.. und es dauert dann so lange dass irgendwann im Browser wir keine Anwort bekamen.

    Wir haben das dann so gemacht, dass wir ein Event getriggered haben, dieser wurde in die Datenbank geschrieben und paralllel gabs ein Cronjob der einfach events abholte und diese ausführte. Man könnte dafür RabitMQ usw nehmen aber das war zu viel für uns.

    apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

    Kommentar


    • #3
      Zitat von BlackScorp Beitrag anzeigen

      Wir haben das dann so gemacht, dass wir ein Event getriggered haben, dieser wurde in die Datenbank geschrieben und paralllel gabs ein Cronjob der einfach events abholte und diese ausführte. Man könnte dafür RabitMQ usw nehmen aber das war zu viel für uns.
      Sorry, aber das verstehe ich dann doch nicht ganz. Könntest du eventuell etwas genauer dazu werden.

      Zumindest scheinen meine Gedanken ja doch nicht verkehrt zu sein.
      Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
      http://www.lit-web.de

      Kommentar


      • #4
        also du hast jetzt eine action im Controller

        PHP-Code:

        public function someAction(){

        //do fancy things

        $event = new SomeActionEvent();
        $event->setFoo($foo);
        $event->setBar($bar);

        $eventDispatcher $myDiContainer->get('dispatcher');
        $eventDispatcher->dispatch($event::$name,$event); //just store into Database do not real dispatch the event



        das $event Objekt wird serializiert in die DB Geschrieben. Auf der anderen seite läuft ein Cron jede Minute der Sich Events aus der Datenbank holt und diese dann wirklich ausführt. Man könnte zwar ein Deamon nehmen, es war dann immer scheiße wenn ich den Qeullcode verändere dass ich den deamon neustarten musste da bei uns es keine Rolle Spielt ob ein Event jetzt eine Minute Später ausgeführt wird, funktioniert das Ganze perfomant genug
        apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

        Kommentar


        • #5
          Also werden die Events quasi in einer Schleife, nach dem Auslesen aus der DB, kontrolliert nacheinander abgearbeitet und es kann somit keine seltsamen Effekte und Konflikte geben?
          Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
          http://www.lit-web.de

          Kommentar


          • #6
            PHP-Code:
             $eventDispatcher $myDiContainer->get('dispatcher'); 
            ServiceLocator-Alarm
            Standards - Best Practices - AwesomePHP - Guideline für WebApps

            Kommentar


            • #7
              Zitat von rkr Beitrag anzeigen
              PHP-Code:
               $eventDispatcher $myDiContainer->get('dispatcher'); 
              ServiceLocator-Alarm
              Ja ich wollte jetzt nicht ne komplette Klasse aufzeichnen, Dispatcher Interface wird natürlich in den Controller Injeziert.

              Also werden die Events quasi in einer Schleife, nach dem Auslesen aus der DB, kontrolliert nacheinander abgearbeitet und es kann somit keine seltsamen Effekte und Konflikte geben?
              Nö, das einzige was man dadurch nicht Kontrollieren kann wäre SQL Reduzierung.

              Sprich statt

              UPDATE SET a = 10;
              UPDATE SET a = 16
              UPDATE SET a = 5;

              könnte man ja direkt a auf 5 Setzen und andere abfragen sich sparen, wenn man von vorne weiß, welche events ausgeführt werden sollten, kann man es ja ermitteln und ein UPDATE machen.
              apt-get install npm -> npm install -g bower -> bower install <package> YOLO https://www.paypal.me/BlackScorp

              Kommentar


              • #8
                Use AngularJS services, you can communicate between different components/directives/controllers.

                [MOD: Link entfernt]

                Kommentar


                • hausl
                  hausl kommentierte
                  Kommentar bearbeiten
                  Keine Werbe-Links hier zu Themenabeichenden Websites. No ad links to sites that don't matches to topic.

              • #9
                Das hat mit einem klassischen EventService nichts mehr zu tun (eher JobQueue) und bringt auch nur bedingt was.
                Auf Events soll und muss instant reagiert werden, dauert es zu lange ist der Listener nicht geeignet -> JobQueue.
                Beides sollte dann also parallel existieren.

                Events sind "Fire-and-forget", die dürfen einen Browser nicht ausbremsen, sie sollen ja lediglich darüber informieren, dass etwas passiert ist, aber nicht auf Rückmeldungen warten.
                actra.development - Zend Certified Engineer for PHP5 - actra-oss @ github

                Kommentar


                • #10
                  Bei der Frage ist auch relevant ob Daten durch andere Module verändert oder nur lesend verwendet werden sollen. Wie sieht dieses "Aufstecken" denn aus?

                  Kommentar

                  Lädt...
                  X