DSLs mit Xtext

Was ist eine DSL?

Was wird durch die DSL beschrieben?

Welche Vorteile hat eine DSL?

Interne DSL vs. externe DSL

Stichworte Podcast

  • Abstraktionen einer Software-Architektur (Architekturkonzepte, Patterns, Layers, …) als Sprache (DSL) beschreiben (Architektur als Sprache)
    • Sprachkonzepte entsprechen Architekturkonzepten (-strukturen)
    • Potential für Missverständnisse wird stark reduziert
    • habe immer eine Baseline die meine Architektur beschreibt
  • Um damit konkrete Anwendungen (Architekturen) zu beschreiben
  • semantisch sinnvoll beschreiben → mehr analysieren können und Code generieren können
  • technologieunabhängige Defnition
  • Mapping definieren (im Generator) → das können dann Experten machen
  • Trennung hat den Vorteil, dass man sich erstmal konzeptionell beschäftigt und nicht schon mit Technologieaspekten
    • gewisse Technologieunabhängigkeit → nicht sagen "wir machen Webservice" sondern "wir kommunizieren syncron oder asyncron"
      • dann Abbildung auf XML und SOAP / MQ …
  • Validieung (Analyse) ob semantisch richtig ist
    • gibt es Komponenten die keiner nutzt?
    • eindeutige Namen
    • statisch erkennbare fehler
    • je mehr ich beschreibe je mehr Dinge werden statisch validierbar
  • Codegenerierung (wenn man schon mal formale Beschreibung hat)
    • API, Skeleton, Basisklasse, Gluecode, Testcode (Mockobjekte, Lasttests), Dokumentation (High Level Systembeschreibung), Grafiken, Persistierung (DAO)
    • Generator muss gebaut werden (genutzt)
    • es wird nicht der gesamte Code generiert
    • Redundanzen sind generiert (alle falsch oder alle richtig) → weniger Fehlerpotential
    • zweites Technologiemapping (Mockplatform) für Tests
  • wann lohnt es sicht
    • je größer das System je mehr Benefit
    • 3 - 5 Leute für ein paar Monare → lohnt es sich
    • Produktlinien (es wäre leichtsinnig das dort nicht zu benutzen) → ist ja bei den meisten VW Systemen der Fall (sehr langer Lifecycle)
  • Vorgehen
    • Incrementelle Entstehung der Sprache
    • typisch
      1. Komponenten
      2. Komponenten bieten Service (Interface) an
      3. Interfacebeschreibung
      4. Komponenten benutzen Services
      5. Komponenten instanzieren
      6. instanziere Komponenten verknüpfen
  • Architecture description Language (generisch) vs. spezifisch (DSL)
    • mit DSL bin ich sehr viel näher an der Domäne
    • bei generischer Sprache habe ich mehr als ich brauche und mir fehlt eventuell noch was
    • generisch: wie verbiege ich die UML damit ich das ausdrücken kann was ich ausdrücken will (sterotypisieren)
  • auch ein Teil der Geschäftslogik kann mit der DSL beschrieben werden
  • grafische Beschreibung vs. textuell
    • textuelle sind erweiterbarer
    • versionierung (diff, merge, …)
    • man kann auch visualisieren (Bilder generieren)
    • produktiver
  • Umstrieg von JMS auf Webservice → Nachrichtenstruktue bleibt die gleiche → dann ändert sich nur der Generator und der generierte Code → der hangeschriebene Code nicht…
  • DSL
    • Archiktektur
    • Fahrkarten (mit Hund aber ohne Fahrrad)
    • Zustandsmaschinen
    • damit es sich lohnt muss es ausreichend oft vorkommen
  • Domain Specific Language
  • sich selber eine Sprache bauen die einen bei einem bestimmten Aspekt der Systementwicklung helfen
  • da Sprache genau auf das abgestimmt ist was man beschreiben will (die Domäne)
  • Verhalten, Strukturen, …, kurz und prägnant ausdrücken
  • Domänen
    • Architektur (-konzepte) per DSL beschreiben
    • fachliche Natur
      • Telefontarife, Abrechnungsmodalitäten
      • Beschreibung von Versicherungsverträgen
    • Enbedded SW Entwicklung
      • Zustandsmaschinen
      • Low Level Bitmanipulation
      • Kommunikation über verschiedene Bussysteme
      • Echtzeitanforderungen (Timing)
    • Domäne ist nicht ausschließlich fachlich sondern auch technisch (beides möglich)
      • von den Programmierern eingebracht
      • auch von Fachabteilung eingebracht
      • aber Domäne hat immer bestimmten Fokus (vs. general purpus)
  • DSL hat weniger code → besser lesbar
  • Trennung von Fachlichkeit und Technik
  • einfachere Integration der Fachler (Fachbereich) - könnte gemeinsam mit einem Entwickler die DSL aufschreiben
  • interne und externe DSL
    • intern: in Programmiersprache eingebettet (Ruby, Metaprogrammierung) → bei Java (noch-?) nicht möglich
    • extern: eigenständige Sprache → und dann generieren

Offene Punkte

  • Integration in Maven, ANT

Links

 
java/dsls_mit_xtext.txt · Zuletzt geändert: 2010/09/20 13:09 von pmay
 
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht:CC Attribution-Share Alike 3.0 Unported
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki