Agiles Modellieren mit             Domain Specific Languages -                 Eine DSL für eine              generische We...
Agiles Modellieren mit             Domain Specific Languages -                 Eine DSL‘s für eine              generische ...
Dominik Hirt
http://www.efinia.de
Personal Finance Management
Das Modellieren mitDomain Specific Languagesvereinfacht den Entwicklungs-prozess und erhöht dieQualität unserer Software.
^[A-Z0-9._%-]+@(?:[A-Z0-9-]+.)+[A-Z]{2,4}$
^[A-Z0-9._%-]+@(?:[A-Z0-9-]+.)+[A-Z]{2,4}$
SELECT COUNT(*)FROM Account JOIN CustomerWHERE Account.CustID = Customer.IDWHERE Customer.Name LIKE ‘D%’
SELECT COUNT(*)FROM Account JOIN CustomerWHERE Account.CustID = Customer.IDWHERE Customer.Name LIKE ‘D%’
1.e2-e4 e7-e52.Lf1-c4 Sb8-c63.Dd1-f3 Lf8-c54.Df3xf7#
1.e2-e4 e7-e52.Lf1-c4 Sb8-c63.Dd1-f3 Lf8-c54.Df3xf7#
Unified ModelingLanguage
Das ProblemBrowser   Desktop      Mobile   Tablet                                   API           Server / Plattform
Die UrsachenRedundanz     Abstraktion   Wiederverwendung
Mythos Wiederverwendbarkeit‣   Klassen‣   Services‣   Komponenten‣   Modelle‣   Prozesse
Model Driven Software DevelopmentDomäne          Modell        MetaModell
Ein [...] Metamodell stellt die Elementeeiner Modellierungssprache und ihreBeziehungen in einem Modell dar.               ...
grammar de.efinia.webapp.WebAPI with org.eclipse.xtext.xbase.Xbasegenerate webAPI "http://www.efinia.de/webapp/WebAPI"WebA...
function createAccount {	    request {	    	    url : "/konto"	    	    method : PUT        param name String        param...
function createAccount {	    request {	    	    url : "/konto"	    	    method : PUT                       RESTful Archite...
grammar de.efinia.dsl.MessagesDsl with org.eclipse.xtext.common.Terminalsgenerate messagesDsl "http://www.efinia.de/dsl/Me...
Vorher                                  Nachher<?xml version="1.0" encoding="UTF-8"?>    message impressum.pageTitle {<mes...
Vorher                                  Nachher<?xml version="1.0" encoding="UTF-8"?>    message impressum.pageTitle {<mes...
grammar de.efinia.categories.Categories with org.eclipse.xtext.common.Terminalsgenerate categories "http://www.efinia.de/C...
// Hauptkategoriencategory "Haus/Wohnung"category "PKW"category "Ernährung"// Unterkategoriencategory "Telefon" --> "Haus/...
Model Driven Software DevelopmentMetaModell                                                       lauffähige  Modell      ...
RedundanzSingle Source
MetaModell          Modell             Test
<Demo>powered by
‣   Routine Implementierungen‣   Boilerplate Code‣   Java Bean Hölle
EFinTLModel:     useCases+=UseCase*     dialogs+=Dialog*                                                   Top Secr     me...
blog.todo42.net
d.hirt@efinia.de
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
Agiles Modellieren mit Domain Specific Languages
Nächste SlideShare
Wird geladen in …5
×

Agiles Modellieren mit Domain Specific Languages

616 Aufrufe

Veröffentlicht am

0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
616
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
3
Aktionen
Geteilt
0
Downloads
3
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • - Vor dem Start: alle Programme schliessen ausser keynote &amp; 2x Eclipse\n\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • wir haben unser B&amp;#xFC;ro in Leipzig\n
  • das ist zwar in Sachsen\n
  • aber zu Sachsen-Anhalt\n
  • und insbesondere zu Halle und zur Martin-Luther-Universit&amp;#xE4;t habe ich ein enges Verh&amp;#xE4;ltniss, da ich hier von 1992-1999 studiert habe.\n
  • Bevor ich fortfahre ... wer hat schon mit Domain Spec. Lang. gearbeitet ?\n
  • \n
  • \n
  • - die F&amp;#xE4;higkeit f&amp;#xFC;r interne DSL&amp;#x2018;s als Erfolgsgrund f&amp;#xFC;r Frameworks wie RoR, Grails\n- wor&amp;#xFC;ber ich heute aber nicht sprechen m&amp;#xF6;chte ist...\n
  • - agil klappt nicht mit UML ... das ist meine pers&amp;#xF6;nliche meinung\n jahrelang versucht, mit einer UML Spec. irgendwas anzufangen, weiterzuverarbeiten ... ohne Erfolg\n
  • - Schnittstellenbeschreibung wichtig f&amp;#xFC;r: \nTechnik\nOrganisation\nzwischenmenschlich\n
  • \n
  • \n
  • - MetaModell beschreibt Modell mit abstrakter Syntax\n- Modell beschreibt die Dom&amp;#xE4;ne mit konkreter Syntax\n- abstrakte Syntax wichtig f&amp;#xFC;r Verarbeitung der Modelle (konkrete Syntax) hingegen nicht\n\n
  • - als Grundlage f&amp;#xFC;r DSL&amp;#x2018;s dienen ,sprachbasierte Metamodelle&amp;#x2018;\n
  • - ggf. in Eclipse zeigen\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • XML Header sind nicht etwa &amp;#xFC;berfl&amp;#xFC;ssig, diese werden f&amp;#xFC;r/von den Editoren ben&amp;#xF6;tigt\n
  • \n
  • \n
  • \n
  • \n
  • - roundtrip live demo\n
  • - roundtrip live demo\n- CMD-H und danach das Dock-Icon anklicken\n\n
  • \n
  • - ca. 1000 Seiten Spec\n
  • \n
  • \n
  • Agiles Modellieren mit Domain Specific Languages

    1. 1. Agiles Modellieren mit Domain Specific Languages - Eine DSL für eine generische WebApp - API Dominik Hirt efinia UG, Leipzig20. IndustrieTag InformationsTechnologie IHK Halle-Dessau 20. November 2012
    2. 2. Agiles Modellieren mit Domain Specific Languages - Eine DSL‘s für eine generische WebApp - API Dominik Hirt efinia UG, Leipzig20. IndustrieTag InformationsTechnologie IHK Halle-Dessau 20. November 2012
    3. 3. Dominik Hirt
    4. 4. http://www.efinia.de
    5. 5. Personal Finance Management
    6. 6. Das Modellieren mitDomain Specific Languagesvereinfacht den Entwicklungs-prozess und erhöht dieQualität unserer Software.
    7. 7. ^[A-Z0-9._%-]+@(?:[A-Z0-9-]+.)+[A-Z]{2,4}$
    8. 8. ^[A-Z0-9._%-]+@(?:[A-Z0-9-]+.)+[A-Z]{2,4}$
    9. 9. SELECT COUNT(*)FROM Account JOIN CustomerWHERE Account.CustID = Customer.IDWHERE Customer.Name LIKE ‘D%’
    10. 10. SELECT COUNT(*)FROM Account JOIN CustomerWHERE Account.CustID = Customer.IDWHERE Customer.Name LIKE ‘D%’
    11. 11. 1.e2-e4 e7-e52.Lf1-c4 Sb8-c63.Dd1-f3 Lf8-c54.Df3xf7#
    12. 12. 1.e2-e4 e7-e52.Lf1-c4 Sb8-c63.Dd1-f3 Lf8-c54.Df3xf7#
    13. 13. Unified ModelingLanguage
    14. 14. Das ProblemBrowser Desktop Mobile Tablet API Server / Plattform
    15. 15. Die UrsachenRedundanz Abstraktion Wiederverwendung
    16. 16. Mythos Wiederverwendbarkeit‣ Klassen‣ Services‣ Komponenten‣ Modelle‣ Prozesse
    17. 17. Model Driven Software DevelopmentDomäne Modell MetaModell
    18. 18. Ein [...] Metamodell stellt die Elementeeiner Modellierungssprache und ihreBeziehungen in einem Modell dar. [Wikipedia]
    19. 19. grammar de.efinia.webapp.WebAPI with org.eclipse.xtext.xbase.Xbasegenerate webAPI "http://www.efinia.de/webapp/WebAPI"WebAPIModel: functions += Function*;Function: function name = ID { request=Request response=Response };Request: request { url : url=URLType (method : method=HttpRequestMethod)? params+=Parameter* };URLType: /ID;enum HttpRequestMethod: GET=GET | POST=POST;
    20. 20. function createAccount { request { url : "/konto" method : PUT param name String param kontoNummer String 1..10 param blz String 8 } response { param accountId long 1..8 }}function updateAccount { request { url : "/konto/{accountId}" method : POST param name String } response { param accountId long 1..8 }}function deleteAccount { request { url : "/konto" method : DELETE param id long } response { param success long 1..8 error deleteAccountError }}error deleteAccountError "Konto löschen fehlgeschlagen"
    21. 21. function createAccount { request { url : "/konto" method : PUT RESTful Architektur param name String param kontoNummer String 1..10 param blz String 8 } response { param accountId long 1..8 }}function updateAccount { request { url : "/konto/{accountId}" method : POST RESTful Architektur param name String } response { param accountId long 1..8 }}function deleteAccount { request { url : "/konto" method : DELETE RESTful Architektur param id long } response { param success long 1..8 error deleteAccountError }}error deleteAccountError "Konto löschen fehlgeschlagen"
    22. 22. grammar de.efinia.dsl.MessagesDsl with org.eclipse.xtext.common.Terminalsgenerate messagesDsl "http://www.efinia.de/dsl/MessagesDsl"Messages: (allMessages += Message)*;Message: message name = JavaIdentifier { (languages += Language)* };JavaIdentifier : ID (. ID)*;Language: name = ID : value = STRING;
    23. 23. Vorher Nachher<?xml version="1.0" encoding="UTF-8"?> message impressum.pageTitle {<messages xmlns:xsi="http://www.w3.org/ de : "efinia | Impressum"2001/XMLSchema-instance" } message impressum.title {xsi:noNamespaceSchemaLocation="efiniaMe de : "Impressum"ssages.xsd"> } message login.pageTitle { <message key="impressum.pageTitle"> de : "efinia | Login" <de>efinia | Impressum</de> } </message> message login.title { <message key="impressum.title"> de : "Willkommen bei efinia" <de>Impressum</de> } </message> <message key="login.pageTitle"> <de>efinia | Login</de> </message> <message key="login.title"> <de>Willkommen bei efinia</de> </message>
    24. 24. Vorher Nachher<?xml version="1.0" encoding="UTF-8"?> message impressum.pageTitle {<messages xmlns:xsi="http://www.w3.org/ de : "efinia | Impressum"2001/XMLSchema-instance" } message impressum.title {xsi:noNamespaceSchemaLocation="efiniaMe de : "Impressum"ssages.xsd"> } message login.pageTitle { <message key="impressum.pageTitle"> de : "efinia | Login" <de>efinia | Impressum</de> } </message> message login.title { <message key="impressum.title"> de : "Willkommen bei efinia" <de>Impressum</de> } </message> <message key="login.pageTitle"> <de>efinia | Login</de> </message> <message key="login.title"> <de>Willkommen bei efinia</de> </message> 60%
    25. 25. grammar de.efinia.categories.Categories with org.eclipse.xtext.common.Terminalsgenerate categories "http://www.efinia.de/Categories"CategoryModel: elements += AbstractElement*;AbstractElement: Category | Keyword;Category: category name = STRING (--> parent=[Category|STRING])?; Keyword: keyword name = STRING --> category=[Category|STRING];
    26. 26. // Hauptkategoriencategory "Haus/Wohnung"category "PKW"category "Ernährung"// Unterkategoriencategory "Telefon" --> "Haus/Wohnung"category "Miete" --> "Haus/Wohnung"category "Strom" --> "Haus/Wohnung"category "Wasser" --> "Haus/Wohnung"category "Benzin" --> "PKW"category "Versicherung" --> "PKW"category "Steuern" --> "PKW"// Zuweisung von Schlüsselwörternkeyword "Telekom" --> "Telefon"keyword "Vodafone" --> "Telefon"keyword "O2" --> "Telefon"keyword "ePlus" --> "Telefon"keyword "Aldi" --> "Ernährung"keyword "Netto" --> "Ernährung"keyword "Edeka" --> "Ernährung"
    27. 27. Model Driven Software DevelopmentMetaModell lauffähige Modell Generator Artefakte Software java sql html Templates / js Transformationsregeln
    28. 28. RedundanzSingle Source
    29. 29. MetaModell Modell Test
    30. 30. <Demo>powered by
    31. 31. ‣ Routine Implementierungen‣ Boilerplate Code‣ Java Bean Hölle
    32. 32. EFinTLModel: useCases+=UseCase* dialogs+=Dialog* Top Secr messages+=Message* segments+=Segment* datenElementGruppen+=DEG*;UseCase: et geschaeftsvorfall name = ID { dialogs+=[Dialog]* };Dialog: dialog name = ID { messages+=[Message]* };Message: nachricht name = ID { type : type=NachrichtenType sender : sender=SenderType segments { segments += [Segment] } };Segment: segment kennung=ID name=ID { datenElemente += (DE | DEGRef)* //datenGruppenElemente += (DEGRef)* };DE: DE name=ID : format=Format length=Length status=Quantity anzahl=INT restriktion=Constraint)?;DEGRef: DEG reference=[DEG] : status=Quantity anzahl=INT;DEG: DEG name = ID { gruppenDatenElemente+=(DE)* };enum Format: an="an" | num="num" | dig="dig" | id="id";MINMAX_LENGTH: min=INT .. max=INT;MAX_LENGTH: (..)? max=INT;EXACT_LENGTH: len=INT;enum Quantity: M=Muss | K=Kann;QualifiedName: ID (. ID)*;enum HBCIVersion : v201=201 | v210=210 | v220=220 | v300=300;enum NachrichtenType : K=Kundennachricht | B=Banknachricht;enum SenderType : K=Kunde | B=Bank;
    33. 33. blog.todo42.net
    34. 34. d.hirt@efinia.de

    ×