Dies ist die Heimat der Java User Group Nürnberg.


Donnerstag, 2. Dezember 2010

Direct-call Entwurfsmuster

Wie jeder weiss, schliesst die beste Art und Weise Objekte miteinander kollaborieren zu lassen Annotationen (siehe Spring und EJB für Beispiele), einiges an XML (wieder mit einem Blick auf Spring und EJB), noch mehr XML (siehe Oracle ADF) und dazu Drag und Drop in einem obskuren visuellen Editor (z.B. wieder ADF) ein. Das ist Industriestandard und es ist wunderbar, denn Consultants können so viel Geld machen und Consulting Unternehmen können sogar noch mehr Consultants in Projekte bringen.

Wie auch immer, es mag Situationen geben, wo wir etwas anderes benötigen. Daher haben wir David Tanzer und ich das Direct-Call-Pattern entwickelt (in einer Cocktailbar).

Direct-Call pattern [1]
(auch bekannt als Collaborateur-With-No-Intermediator Entwurfsmuster)

Einführung:
2 Objekte wollen miteinander kommunizieren. Einer ist der Aufrufer (Caller), der andere der Aufgerufene (Callee). Für den Aufgerufenen ist das völlig in Ordnung und der Aufrufer macht alles erforderliche vor und nach dem Aufruf gerne selbst.

Anforderungen:
2 Objekte, manchmal 1 Objekt in 2 Rollen (Aufrufer, Aufgerufener)
Sonst nichts

Lösung:
Der Aufrufer ruft den Aufgerufenen direkt auf. Kein Proxy, Interceptior oder sonst ein Vermittlerobjekt sind im Aufruf involviert. Wirklich, bloss ein Aufruf von einem vertrauenswürdigen Freund zum anderen. Vielleicht loggt eine dritte Partei den Aufruf, aber das lässt sich heutzutage schwer vermeiden.

Pros:
Schneller Aufruf
Saubere und kurze Stack Traces
Weniger Verwirrung
WYSIWYG

Contra:
Viele "WTF ist hier die Dependency Injection" und "wie finde ich den Interceptor" Kommentare
Verärgert das nicht benötigte Annotationen- und Aspektorientierungs-Zeug
Andere können den Code verstehen, den man geschrieben hat
Weniger Geld mit Software Support

Nutzen wenn:
Kein Geld für Application Server vorhanden
Keine Zeit um Frameworks zu debuggen
Man sich nicht nach langen Zeiten voller exklusivem Consulting sehnt
Projekt-Laufzeit länger als einige Wochen/Monate (und man soll sich selbst ohne Aufpreis um den Support kümmern)