Data Context InteractionData Context Interaction (DCI, deutsch Daten-Kontext-Interaktion) ist ein Architekturmuster für die Modellierung der Fachlichkeit komplexer objektorientierter Software. DCI trennt Fachobjekte (Data) von Anwendungsfällen (Context) und Rollen (Interaction). DCI wurde erstmals von Trygve Reenskaug, dem Erfinder des Model-View-Controller-Architekturmusters, beschrieben. Später wurde er darin federführend von James O. Coplien unterstützt. BeschreibungData Context Interaction basiert auf der Idee, nicht – wie sonst in der objektorientierten Analyse und Design üblich – Klassen zu modellieren, sondern Objekte zu beschreiben. Bei DCI sollte beim Modellieren eher an die Instanzen zur Laufzeit als an die Klassen, aus denen die Objekte instanziert wurden, gedacht werden. Diese Herangehensweise verspricht keine mit Funktionalitäten überladene Klassen zu bekommen, sondern simple Fachobjekte (Data) ohne eigene fachliche Funktionalität, welche unterschiedliche Rollen (d. h. Funktionalitäten) erfüllen, die aber selbst in die Interaction-Klassen ausgelagert werden. Die eigentliche Fachlichkeit (d. h. Anwendungsfälle) selbst wird in den sogenannten Context-Klassen abgebildet. Data Context Interaction ist gekennzeichnet durch die strikte Trennung von Data (Datenobjekte – entspricht in etwa den Fachobjekten), Context (Kontext – entspricht Anwendungsfällen, Szenarien oder Algorithmen) und Interaction (Interaktionen – entspricht den Rollen, die die Datenobjekte in unterschiedlichen Kontexten wahrnehmen): Data (Datenobjekte)Bezeichnet die Fachobjekte und ihre Relationen untereinander. Diese Datenobjekte enthalten keinerlei fachliche Funktionen mehr und sind mehr oder weniger simple Datenhalter. Sie sollten dem gedanklichen Modell des Anwenders zu den Daten der Applikation entsprechen. Sie entsprechen dem Model des Model View Controller-Architekturmusters. Ein Beispiel für ein Datenobjekt wäre ein „Bankkonto“. Es hätte simple Methoden, um den Kontostand abfragen und verändern zu können, aber keine Funktionalitäten, welche Transaktionen oder den Zugriff auf andere Objekte oder Benutzerinteraktionen benötigen. Derartige Aufgabenstellungen werden in DCI durch die Kontexte ermöglicht. Data-Klassen entsprechen den Entities, Value Objects und Aggregates im Domain-driven Design. Context (Kontext)Beschreiben den Kontext, in welchem die Data-Objekte in spezifischen Rollen verwendet werden. Dies sind die Anwendungsfälle, Szenarien und Algorithmen der fachlichen Aufgabenstellung der Applikation. Kontexte sind Objekte, welche einen oder mehrere Anwendungsfälle repräsentieren und werden für jede Ausführung eines Use-Cases instantiiert. Ihre Hauptaufgabe ist es, die Data-Objekte zu identifizieren, welche eine bestimmte Rolle in dem Anwendungsfall spielen, und diese auch mit dieser Rolle zu assoziieren. Dieses Binden der Data-Objekte an ihre Rollen ist vergleichbar mit dem Polymorphismus in der Objektorientierten Programmierung. Die Umsetzung eines bestimmten Anwendungsfalles ist somit der Ablauf einer Business-Funktionalität basierend auf Daten-Klassen welche in diesem Anwendungsfall eine bestimmte Rolle spielen. Die gesamte Businessfunktionalität einer Applikation ist somit die Summe eines Netzwerks an Methoden, dezentralisiert in verschiedenen Rollen. Ein Beispiel für einen Kontext wäre ein Banktransfer zwischen zwei Konten. Dieser Banktransfer bedient sich des Datenobjektes „Bankkonto“ in den Rollen „Quellkonto“ und „Zielkonto“. Die Trennung von Datenobjekten und Rollen ermöglicht es beispielsweise auch, Banktransfers zwischen anderen Kontentypen (wie Kreditkonten oder Sparkonten) zu implementieren, ohne auf die eigentlichen Datenobjekte dahinter Rücksicht zu nehmen. Interaction (Interaktionen)Unter Interaktionen versteht man bei Data Context Interaction die Rollen, welche Datenobjekten zugeordnet werden können. Eine Rolle entspricht bei DCI der Vorstellung eines Anwenders von den Verantwortlichkeiten von Objekten im System. Eine Rolle ist eine Sammlung an Verantwortlichkeiten. Während in der Objektorientierung die Verantwortlichkeiten in Objekten oder Klassen gesehen werden, werden diese bei DCI den Interaktionen und somit den Rollen zugeschrieben. Objekte übernehmen in einem Anwendungsfall bestimmte Rollen, welche von Anwendungsfall zu Anwendungsfall unterschiedlich sein können. Ein Bankkonto übernimmt einmal die Rolle „Quellkonto“, ein anderes Mal die Rolle „Zielkonto“ und wiederum ein anderes Mal die Rolle „Transferkonto“. Ein Beispiel für eine Rolle wäre ein Zielkonto, auf welches beim Anwendungsfall „Banktransfer“ Beträge gebucht werden können. Vergleiche zu anderen Technologien
ImplementierungenInzwischen gibt es eine Reihe von ersten Umsetzungen von Data Context Interaction für verschiedene Programmiersprachen. Da jedoch DCI ein anderes, neues Programmierparadigma darstellt, ist seine Umsetzung auf andere Programmiersprachen oft holprig und umständlich. Beispielsweise ist für die Umsetzung von Rollen üblicherweise das Injizieren von Methoden notwendig. Einige wenige Sprachen unterstützen Rollen nativ, bei anderen Sprachen wird dynamische oder statische Injection oder Pre-Kompilierung verwendet um DCI zu simulieren. Eine native Umsetzung von Data Context Interaction gibt es derzeit noch nicht. Eine Umsetzung von DCI ist Apache Zest (ehemals Qi4j), ein Java Framework für Domain-zentrierte Applikationsentwicklung, basierend auf Konzepten wie Aspektorientierte Programmierung, Data Context Interaction und Domain-driven Design. Scala besitzt mit den so genannten Traits ein Sprachkonstrukt mit dem sich Rollen nativ umsetzen lassen[2], darüber hinaus gibt es erste Ansätze für Umsetzungen mit PHP (Wax Framework), Smalltalk, C++, C#, Ruby, JavaScript und Python. Weblinks
Einzelnachweise
|
Portal di Ensiklopedia Dunia