MDA - Konzepte, Einsatzszenarien und Code Generation



  • Ich setze mich derzeit intensiv im Rahmen eines neuen Projekts mit DDD/MDA auseinander. Ich erkenne viele Vorteile, sehe aber auch viele Nachteile.

    Bisher habe ich mir OpenArchitectureWare, Fornax und AndroMDA genauer angeguckt. Allerdings gefällt mir auf Anhieb der Ansatz von xtext und ecore besser als UML, weil ich besonders viel Einfluss auf die Metamodelle und die Code Generierung habe.

    Warum überhaupt MDA einsetzen? Erreicht man dadurch wirklich mehr Produktivität? Ich kann mir viel Code generieren und dadurch Zeit sparen. Es gibt aber auch Code, den ich mir nicht vernünftig generieren lassen (z. B. die reine Geschäftslogik). Dann habe ich das Problem, dass ich in generierten Code etwas ändern muss und hoffen das bei erneuter Generierung mein Code weiterhin funktioniert.

    Mittlerweile finde ich andere Ansätze "eleganter". Für die Umsetzung von Cross-Cutting-Concerns(Logging, Sicherheit, Validierung und Fehlerbehandlung) finde ich z. B. AOP deutlich besser. Durch den Einsatz guter Pattern und Frameworks kann ich mir auch einiges an (redundanten) Code sparen.

    Setzt ihr MDA in der Praxis ein? Wenn ja, welche Tools, was generiert ihr und wie sind die Ergebnisse? Lohnt sich der Aufwand für MDA am Ende? Kann man komplexe Benutzerschnittstellen vernünftig generieren lassen?



  • MDA und AOP schliessen sich nicht aus. In der Tat ist MDA eine weit hoehere Abstaraktionsebene als AOP. Das deuten schon die Namen an. Denn aus einem Modell lassen sich auch Aspekte generieren. AOP wird leicht ueberschaetzt. In der Praxis macht AOP-Code ~6%-10% aus (habe ich mal in der iX gelesen). Zugegeben, es ist eine nicht zu unterschaetztende Zeitersparnis, aber auch nur wenn das Design "AOP-freundlich" ist.

    Dass man generierten Code nicht manuell anpassen sollte ist offensichtlich. Die Aenderungen sind fluechtig. Aendert sich das Modell (warum auch immer), wird der komplette Code ueberschrieben. Naive, und IMHO einzige, Loesung ist ein Glue-Layer.

    Ansonsten: MDA ist gerade dafuer da, um Geschaeftslogik zu beschreiben. Gelingt es einem nicht, sollte man das Modell (bzw. die Metasprache) ueberdenken.



  • Anscheinend hast Du schon einige Erfahrungen mit MDA gemacht. Welche Tools hast Du eingesetzt, welchen Code hast Du generiert? Wie hast Du den "Glue-Layer" technisch umgesetzt (Pattern)?

    Ich sehe den größten Vorteil von MDA besonders bei der Generierung von webbasierten Schnittstellen, da wir dort die meiste Zeit investieren.

    Apollon schrieb:

    Ansonsten: MDA ist gerade dafuer da, um Geschaeftslogik zu beschreiben. Gelingt es einem nicht, sollte man das Modell (bzw. die Metasprache) ueberdenken.

    Meinst Du Geschäftslogik beschreiben mit zum Beispiel BPEL oder eher mit Aktivitäts-/Sequenzdiagrammen?



  • Apollon schrieb:

    Dass man generierten Code nicht manuell anpassen sollte ist offensichtlich. Die Aenderungen sind fluechtig. Aendert sich das Modell (warum auch immer), wird der komplette Code ueberschrieben.

    Also bei AndroMDA ist es so, dass die Sachen die immer wieder neu generiert werden in einem extra Ordner liegen. Das was editiert werden kann/muss kommt in einen anderen Ordner und wird dann auch nicht überschrieben, wenn man was am Modell ändert und neu generiert.



  • www...de schrieb:

    Apollon schrieb:

    Dass man generierten Code nicht manuell anpassen sollte ist offensichtlich. Die Aenderungen sind fluechtig. Aendert sich das Modell (warum auch immer), wird der komplette Code ueberschrieben.

    Also bei AndroMDA ist es so, dass die Sachen die immer wieder neu generiert werden in einem extra Ordner liegen. Das was editiert werden kann/muss kommt in einen anderen Ordner und wird dann auch nicht überschrieben, wenn man was am Modell ändert und neu generiert.

    Allerdings muss man dann nach jeder neuen Generierung den eigenen Code manuell wieder einpflegen, was auf Dauer einfach zu viel arbeitet macht. Da gefällt mir der Ansatz mit dem Glue-Layer schon besser.

    Hat sonst noch wer Erfahrungen mit MDA gemacht, setzt das wer in der Praxis ein oder weiß, ob das bei großen Softwarehäusern eingesetzt wird?



  • MDA - Evaluierer schrieb:

    www...de schrieb:

    Apollon schrieb:

    Dass man generierten Code nicht manuell anpassen sollte ist offensichtlich. Die Aenderungen sind fluechtig. Aendert sich das Modell (warum auch immer), wird der komplette Code ueberschrieben.

    Also bei AndroMDA ist es so, dass die Sachen die immer wieder neu generiert werden in einem extra Ordner liegen. Das was editiert werden kann/muss kommt in einen anderen Ordner und wird dann auch nicht überschrieben, wenn man was am Modell ändert und neu generiert.

    Allerdings muss man dann nach jeder neuen Generierung den eigenen Code manuell wieder einpflegen,

    Wie kommst du darauf? Mach mal das Tutorial durch http://galaxy.andromda.org/index.php?option=com_content&task=view&id=104&Itemid=89

    Hat sonst noch wer Erfahrungen mit MDA gemacht, setzt das wer in der Praxis ein oder weiß, ob das bei großen Softwarehäusern eingesetzt wird?

    Bei uns wird es für nen Teil der Software eingesetzt. Ich sag jetzt aber nicht welche Firma.



  • Hallo,

    wir nutzen einen MDA/MDD Ansatz und kommen damit sehr gut klar.

    Wir nutzen das Tool Rhapsody von (mittlerweile) Telelogic und deren Ansatz ist es sehr nah am Code zu sein. Es gibt ein roundtrip engineering, welches dafür sorgt, dass Modell und Code nicht auseinander laufen. Das funktioniert echt gut.

    Außerdem generieren wir unsere Anwendungslogik und zwar aus statecharts und aktivitätsdiagrammen.

    Das wichtigste war uns, dass wir eine zentrale stelle haben, wo alle Dokumentationen und der Code zu finden sind, damit nicht jeder Entwickler auf zig Servern alles zusammensuchen muss und ggf. etwas übersieht. Jetzt haben wir ein Modell in dem sich Doku, Code, Tests, etc. befinden und man kann gar nichts übersehen.

    Gruß Paddy



  • paddy@home schrieb:

    Das wichtigste war uns, dass wir eine zentrale stelle haben, wo alle Dokumentationen und der Code zu finden sind, damit nicht jeder Entwickler auf zig Servern alles zusammensuchen muss und ggf. etwas übersieht. Jetzt haben wir ein Modell in dem sich Doku, Code, Tests, etc. befinden und man kann gar nichts übersehen.

    Das wird in Fachkreisen auch Product Lifecycle Management (PLM) genannt. Obwohl sauberes PLM umfasst auch noch die Projektplannung (PP), Konfigurationsmanagement (CM) und das Änderungsmanagement (ChM). Die Erstellung des Traceability Modells ist dann Aufgabe im Requirements Engineering (RE). Das kann auch ruhig auf mehreren Servern verteilt seien. Hat mit MDA/MDD aber erstmal direkt nichts zu tunen ...

    Zu den restliche Posts halte mich erst einmal zurück. Mal sehen wer sich hier noch findet ...


Anmelden zum Antworten