Ein Großteil der Verwechslungen zwischen "Message Passing" und "Event Based" hat mit Details zu Architektur und Implementierung zu tun. Ich habe ereignisgesteuerte Systeme gesehen (und geschrieben), die tatsächlich vom Betriebssystem bereitgestellte Meldungen für ihre Implementierung verwenden. Ich vermute, Sie beziehen sich wirklich auf architektonische Ideen.
Wie viele Leute bereits darauf hingewiesen haben, sind "Message Passing" und "Event Based" nicht gut genug, um Mehrdeutigkeiten zu vermeiden.
Was sind die relativen Vorteile eines "Message Passing" -Systems gegenüber einem "Event Based" -System?
Message Passing
Ich gehe zunächst davon aus, dass Sie, wenn Sie ein "Message Passing" -System sagen, von einem System sprechen, bei dem ein Objekt eine Nachricht an ein bestimmtes anderes Objekt ausgibt. Wenn ich an ein System denke, das auf diesem Paradigma basiert, dann denke ich allgemeiner an ein System, in dem ein Objekt, das etwas erkennt, weiß, wem etwas erzählt werden muss. (Ich gebe nicht an, woher es weiß, nur dass es weiß.)
Diese Art von Architektur eignet sich sehr gut für Systeme, bei denen Hersteller und Verbraucher bekannt sind. Entweder weiß der Produzent einer Nachricht, wer sie empfangen muss, oder der Konsument muss wissen, von wem er die Nachricht erhält.
Wenn Sie einen Bankenantrag schreiben, würde man erwarten, dass Sie wirklich wissen möchten, an wen Sie Ihre Transaktionen senden und von wem sie kommen.
Ereignisbasiert
Das andere System, an das Sie denken, wenn Sie sagen, ein "ereignisbasiertes" System ist eines, bei dem ein Objekt ein "Ereignis" auslöst, ohne zu wissen, wer (wenn jemand) darauf reagiert.
Diese Art von ereignisgesteuerter Architektur eignet sich sehr gut für Systeme, bei denen es dem Produzenten nicht wichtig ist, wer das Ereignis produziert, oder bei denen es dem Verbraucher nicht wichtig ist, wer das Ereignis produziert hat.
Im Allgemeinen eignen sich diese Systeme hervorragend, wenn Sie die Beziehung zwischen Verbrauchern und Produzenten nicht kennen und eine dynamische Beziehung erwarten.
Ein System, in dem ich dies verwendet habe, war ein System, in dem die Anwendung tatsächlich aus dynamisch konfigurierten Modulen (Plug-Ins) bestand, die zur Laufzeit geladen wurden. Wenn ein Modul geladen wurde, wurde es für die Ereignisse registriert, die es betrafen. Das Ergebnis war ein System, bei dem es sehr einfach war, die Funktionalität zu erweitern.
Angenommen, Bedingung A hat das Ereignis EA ausgelöst, das normalerweise die Antwort RA verursacht hat. Das Objekt, das die Antwort RA ausgelöst hat, hat sich einfach registriert, um das Ereignis EA zu empfangen, und hat darauf reagiert, als es ankam. Angenommen, wir möchten EA eine neue Antwort mit dem Namen RA_1 hinzufügen. Dazu fügen wir einfach ein neues Objekt hinzu, das nach EA sucht und die Antwort RA_1 generiert.
Hier sind einige Beispiele (unter Verwendung Ihrer Terminologie):
- "message passing" : Ihr Chef fordert Sie auf, Ihr Arbeitszeitblatt auszufüllen.
- "ereignisgesteuert" : Der Abteilungssekretär sendet eine E - Mail an alle, die daran erinnern, dass ihre Arbeitszeitnachweise heute fällig sind.