Messaging als Programmiermodell

Aktuell beschäftige ich mich intensiv mit der Strukturierung von Software, welche auch nach einiger Zeit noch wartbar ist. Auf der Suche nach neuen Wegen, bin ich auf das Messaging gestossen. Den meisten dürfte das Messaging schon von den Message Queues bekannt sein. Sprich wenn eine Applikation Messages an eine Message Queue sendet und diese Messages dann später zu einem beliebigen Zeitpunkt (also asynchron) wieder von einer Applikation konsumiert werden . Mir war bis zu diesem Zeitpunkt nicht bewusst, dass man Messaging auch synchron in einer einzelnen Applikation oder Service verwenden kann. In diesem Artikel möchte ich vor allem wertvolle Quellen zu diesem Thema auflisten und dazu noch mit einigen Kommentaren ergänzen.

Im letzten Artikel habe ich aufgezeigt, wie man die Wartbarkeit von Software verbessern kann. Trotz aller Mühe mittels Modularisierung und der Verwendung von einem sauberen objektorientierten Ansatz entsteht häufig sehr komplexer Code mit vielen Abhängigkeiten. Daher habe ich mich als erstes auf die Suche nach den Ursprüngen von OO gemacht und habe herausgefunden, dass die ursprüngliche Intention von OO Messaging ist, was in diesem Artikel The Deep Insights of Alan Kay sehr schön verdeutlicht wird.

Als nächstes bin ich auf einen sehenswerten Talk von Joe Armstrong, den Erfinder von Erlang gestossen. Systems that Run Forever Self-heal and Scale behandelt das Konzept von Messaging in verteilten Systemen und zeigt sehr schön auf, warum Messaging dazu beiträgt komplexe Systeme verständlicher zu machen.

Dank Igor Wiedler (@igorwesome) bin ich auf ein ausführliches, praktisches Beispiel von Steve Bate (@Steve_Bate) in C# gestossen. Dort wird in einer Serie von 3 Teilen aufgezeigt, wie synchrones Messaging in C# aussehen könnte, und wie das die ganze Lesbarkeit und Struktur von Code vereinfacht.

Wiederum Ralf Westphal (@ralfw), welchen ich schon seit langer Zeit sehr schätze, hat das Beispiel von Steve Bate aufgegriffen und seine Gedanken dazu beigesteuert.

Als erstes zeigt Ralf im Post Messaging for more Decoupling auf, wie Messaging zu besserer Entkopplung von Software führt. In Messaging as a Programming Model – Let’s get real greift Ralf nochmal das Beispiel von Steve auf und versucht herauszustreichen, was den nun die Essenz von Messaging ist.

In Flows – Visualizing the Messaging Programming Model versucht Ralf das Messaging zu definieren und mittels eines grafischen Flows sprachunabhängig darzustellen. Mich haben diese grafischen Flows sehr an das Konzept des Flow Based Programmings erinnert, welches aktuell von Henri Bergius (@bergie) wiederentdeckt und im Framework NoFlo implementiert wird. Im Talk Introduction to Flow-Based Programming and NoFlo kann man sehr schön sehen, dass genau das Konzept des Messagings verwendet wird. Die Pfeile sind die Messages und die Boxen Klassen bzw. Funktionen. Die Idee dahinter ist, dass man diese Flows visualisieren  und dadurch besser verstehen kann.

Ich finde Messaging als Konzept, auch in einem synchronen Kontext, extrem interessant und versuche in nächster Zeit damit herum zu experimentieren, um dafür ein Gefühl für den täglichen Einsatz in Projekten zu bekommen.

 

3 Responses

  1. Mit Messaging beschäftige ich mich nun seit vier Jahren intensiv. Angefangen hat es unter dem Stichwort Event-Based Components (EBC). Doch seitdem habe ich einen recht weiten Weg zurückgelegt 😉

    Spuren habe ich dabei vor allem in meinem Blog und in der dotnetpro hinterlassen. Einige davon sind hier zusammengefasst: http://clean-code-advisors.com/ressourcen/flow-design-ressourcen

    Ich halte Messaging auch für das missing link bei der Objektorientierung. Die OOP würde mit ihm anders aussehen. Aber wir müssen uns ja nicht geschlagen geben. Mit C# oder Java oder auch C++ kann man “OOP as if you meant it” betreiben.

  2. Hey Ralf

    Danke für den Link. Einige Artikel kenne ich zwar schon, aber da sind doch noch ein paar neue. Muss ich mir reinziehen 🙂

    Greetz
    Ralph

Leave a Reply

Your email address will not be published. Required fields are marked *