SlideShare una empresa de Scribd logo
1 de 20
Wo wollen wir hin?




1
(IT affine) Fachexperten sollen
            2
zusammen ein System entwickeln, dass
     3
sich langfristig anpassen lässt
                             4
und ständig Potentiale neuer IT-
Technik erschließt.



    Konkret: Wirtschaftsinformatik-Studenten von Sowi rekrutieren
Fachexperten
Gemeinsames Verständnis & Nachvollziehbarkeit


Prozess/Workflow                 zu einem    Objekt                (derAblauf)




           Eine   Wizzard


Eine   Ansicht (Tabelle, Form, Tab)

Undo/Redo – ein    Kommando

              Nachvollziehbarkeit von SystemElementen & Abläufen = Dokumentation
                                         = EINE SPRACHE für beteiligte Personen
Applikation + Bausteine
Applikation besteht aus




 Datenstrukturen                      Command                  Prozess

                                      Undo / Redo              Prozess als Akt?
 Rechnung, RechnungsPosition          (Vorgang?)
 Lieferschein, LieferscheinPosition                            Condition WertSumme=LieferSumme
 Vertrag
                                      Conclusion „Auswählen“
 BestandsKonto                        Conclusion „Abbruch“     Condition WertSumme=LieferSumme
                                      Exception occured
                                                               Condition WertSumme=LieferSumme
DatenStruktur + Commands
                                     Command

                                     Undo / Redo
                                     (Vorgang?)


                                     Conclusion OK
                                     Conclusion CANCEL
                                     Conclusion Exception
Datenstrukturen


Rechnung, RechnungsPosition
Lieferschein, LieferscheinPosition

                                                                                Command =
                                                     (1) Verändert Datenstruktur
Vertrag
BestandsKonto




                                                                                Tätigkeit?
                                            (2) Evtl. Datenstruktur speichern
                                            checkIn()
                                            addToSaveQueue()
All or nothing!

  Command          Kommando kann mehrere Seiten haben, wird aber in
                   definiertem Zustand beendet: Undo/Redo - Möglichkeit



     Page1




                  Kommando erfolgreich
                  (FINAL_OK_CONCLUSION)


     Page2
                  Kommando abgebrochen
                  (FINAL_CANCEL_CONCLUSION)




                  Kommando technische Ausnahme
                  (FINAL_EXCEPTION_CONCLUSION)
Applikation + Bausteine


                                          Prozess

                                          Prozess als Akt! Zustand des Prozesses im Akt vermerkt!




                                            (2) Conditions schaltet Prozess
                                                + enable/disable Commands
                                                + prüfen Rollen
    Datenstrukturen                             + Validieren Zustand


    Rechnung, RechnungsPosition
    Lieferschein, LieferscheinPosition
                                          Condition WertSumme=LieferSumme
    Vertrag
    BestandsKonto
                                          Condition WertSumme=LieferSumme

                                          Condition WertSumme=LieferSumme




                                         (1) Conditions prüfen Datenstruktur
Prozess + Conditions
Prozess Engine
                                                                                 Rechnung Hinzufügen
                                             Command: Rechnung Hinzufügen        Formular
                 Condition

                  (1) isEnabled?

                                             Erfolgreich ?
                                             Abbruch?
       State                                 Ausnahme?


         1

                                                                            Condition
                                                                                                       State2



     Conditions beschreiben, wie weiter im
     Prozess zu verfahren ist.


     Conditions beschreiben, ob Commands
     zu Verfügung stehen, oder nicht.                                       Condition
                                                                                                       State3
Datenstrukturen

Entity Rechnung {
    decimal rechnungsSumme;              //
    datetime createdAt;
    date rechnungsDatum;
    string bemerkung;
    status rechnungsStatus;
    Lieferant lieferant;                 // reference
    list<Positionen> positionen;         // kann owning sein oder reference
                                          // als option angeben
}


rechnungsStatus = [ Angelegt, Abgeschlossen, Korrigiert, Archiviert ]
// prozess status als option -> keine lese/schreibrechte direkt
SORTED / UNSORTED / CONTAINMENT / OPPOSITE / DEPRECATED / SIZE / READONLY? / KEY /
   INDEX / NOTNULL? / NULLINIT / AUTOGEN_KEY by insert?
Condition + Dokumentation
process RechnungsKontrolle with RekoAkt rekoAkt on status rekoAkt.status {


<< process definition here >>


condition RechnungsWertSumme=ProformaWertSumme
          „Die RechnungsSumme muss der ProformaWertSumme entsprechen um den Akt abschliessen zu können“
          LM.testEqual(rekoAkt.rechnungWarenWert, rekoAkt.proformaWarenWert, rekoAkt.originalRechnung.aufbau.tolAbsolut)
          „Editieren sie den RechnungsPositionen / ProformaPositionen“


condition Administrator
          „Sie benötigen AdministratorRechte“
          IMpreisService.hasRole(„REKO“, „ADMIN“)
          „Kontaktieren Sie ihren Vorgesetzen (Solveig?)“


condition kann ueberschreiben
          „Der Akt muss abgeschlossen sein und Sie benötigen Administrator-Rechte“
          rekoAkt in RechnungsKontrolle is status Abgeschlossen && rekoAkt in RechnungsKontrolle is Administrator
          „?“




•   checkt auf rekoAkt == null -> false
•   rekoAkt „VariableReference“ vom Prozess
•   is / is status als SprachErweiterung
•   Verschiedene Ansichten des Prozesses möglich (RollenAnsicht)
Process = Spezifikation
process RechnungsKontrolle with RekoAkt rekoAkt on status rekoAkt.status {


    Angelegt [ validationConditions ]: <<options>>
                on trigger [condition] Rechnung editieren
                on trigger [condition] Proforma editieren    // ->


                auto [RechnungsWertSumme=ProformaWertSumme] -> Abgeschlossen


    Abgeschlossen [RechnungsWertSumme=ProformaWertSumme]: <<options>>
    on entry: [condition] Rechnung abschliessen                         // wenn command abbricht-> zustand nicht betreten
                <<command>> <<conclusion>> -> <<state>>




     on exit:                                                           // wenn command abbricht-> zustand nicht verlassen


     Korrigiert [ ]: END
                <<command>>


}
Interface as contract?



    Process Start
                                                                                                            Spezifikationen?




process RechnungsKontrolle with RekoAkt rekoAkt on status rekoAkt.status {


    creators and read only views:
                on trigger [condition] RekoAkt aus Rechnung erzeugen
                on trigger [condition] RekoAkt leer erzeugen
                on trigger [condition] RekoAkte anzeigen


    Angelegt [ validationConditions ]:
                on trigger [condition] Rechnung editieren
                on trigger [condition] Proforma editieren
                auto [RechnungsWertSumme=ProformaWertSumme] -> Abgeschlossen


    Abgeschlossen [RechnungsWertSumme=ProformaWertSumme]:
    on entry: [condition] Rechnung abschliessen                        // wenn command abbricht-> zustand nicht betreten
                <<command>> <<conclusion>> -> <<state>>




     on exit:                                                          // wenn command abbricht-> zustand nicht verlassen


}
Vorgehensweise

(1)   Datenstrukturen + Prozess + Commands anlegen
      Überblick – nichts ausprogrammieren

(2)   Spezifikation (UseCase) anlegen und ausbauen
      Lernen -> Datenstrukturen ausbauen, Prozess verfeinern, abstimmen mir prozess owner?
      Input Objekte -> Ziel Objekte


(3)   Validierungsregeln fuer Objekte anlegen (TestKriterien)
      Lernen?

(4)   Mit Programmierer Kommandos implementieren

(5)   Mit Programmierer UserInterface implementiern

(6)   Spezifikation ausführen und mit Regeln prüfen (Ständig, auch bei Änderungen! )

(7)   Mit Validierungsregeln Spezifikation testen, evtl. Regeln in Prozess übernehmen
Spezifikation:                UseCase Akt fuer10.000 Euro

Prozess



                                      // Hier werden Input-Objekte durch Kommandos mit Fake-UserInterfaces erstellt, nicht durch object-Builder

               Command 1
               Command
                                      RekoAkt rekoAkt = call RechnungsKontrolle.erstelle Akt( )


                                      call RechnungsKontrolle.rechnung hinzufuegen(rekoAkt)
               Command 2
               Command                     with page {
                                           conclusion „Save“ {
                                                Rechnung rechnung = getSelected(Rechnung.class)

               Command
               Command 3                        rechnung.lieferant = …             // rechnung.betrag = …
                                                return new arraylist{rechnung}
                                           })


               Command n
                                      call RechnungsKontrolle.proforma wählen(rekoAkt)
                                           with page {
                                           conclusion „Select“ {
               Command n + 1                return repo.findProformasById(…)
                                      })


                                      assert rekoAkt in RechnungsKontrolle is status Abgeschlossen




     RekoAkt
                                                 Condition
Spezifikation:                UseCase Akt fuer10.000 Euro

Prozess




               Command 1
               Command

                                       Condition


               Command 2
               Command




               Command
               Command 3




               Command n




               Command n + 1




     RekoAkt                       ?               RekoAkt „von Hand erstellt“ im
                                                   MPS
Commands: Rechnung editieren
                                                                                                                 Aufruf mit UI, TestUI, ohne UI


         Objekt ?          Was ?   Objekt?


command Rechnung editieren (Rechnung rech)     (new session, as tab) {      // default, no new session, prompt
    << command fields >>


    command init:      <statementlist>


    page „Rechnung editieren“
        userinterface RechnungsKopfEditor form:       // bound Object: list<Rechnung>
        page init:      <statementlist>
        set scopes: <statementList>             // set necessary scopes -> get them from ModelRepository


        conclusion:
           „Save“ (OK_CONCLUSION):
                 flag „message here“ when (condition)
                    abort „message here“ when (condition)   // beendet dieses command mit conclusion exception
                    done
                    page 2
        „Cancel“ (CANCEL_CONCLUSION):
                … … …


        catch(IOException) {
}
ModelRepository

                      ModelRepository Reko
                                                               checkIn

                                                                 book

                                                                 delete




                                                              checkOut

                              Delete + Update Queue ?   scope / listView




                      ModelRepository Stammdaten
doit + transaction




                              Delete + Update Queue ?
Inhalt eines Model

StammDaten Package = MODEL + VIRTUAL FOLDERS



 (1) Datenstrukturen                           (2) Repository + Mapping

 Artikel                                       Abfragen
 Lieferant                                     Mapping




 (3) Views für Artikel,                        (4) Ablauf + Commands
 Lieferanten                                   -   Commands
 -Tabellen                                     -   Workflow
 -Formulare                                    -   Berechtigung
                                               -   DOKU + SPECIFICATION
Daten & Datenstrukturen:
   Datentypen
   Value Objects / Entity
   ModelRepository, Queries und Mappings
   Cache



Logik & Programmfluss:
   Session
   Commands
   Prozess & Condition




Anzeige und Steuerung
   Application, Views und Links
   Batchjob
   Testing
3 DSLs – 2 Plain-Java Schnittstellen
                                                                                                     OBJECTFLOW 2012



                                                                                                      morepo
                      Forms                                 Persistance-Layer

UI                                                          Repository + Methods inside Repository
                                                            mit myBatis + rawSQL ?
Views + action links




                                                                                                     OBJECTFLOW 2015


Simple Java Interfaces                                               Simple Java Interfaces

                              ObjectFlow
                                                  ModelRepository
     BusinessLogic            (dependency gegen
                              * JodaTime,
                              * BaseLang,         checkin ObjectNetworks
     Objects and Fields       * Collections)      checkout ObjectNetworks (RW / RO)
                                                  update Accounts fast
     Processes / Workflows
     Commands
     Validation
3 DSLs in 2013
Language: Forms4                                                      Language: ManMap
UI Views                                                              Persistance + Query

FatForms4 (Gen)                                                       SpringMiniMap (Gen)

                F4_runtime
      ( Vaadin/JavaFX 2 commons ??)                                                MM_runtime

     F4_interfaces (plain java)                                           MM_interfaces (plain java)



                       Use as RIA (serialization) ??




                                 Language: Objectflow
                                 process, command, condition, entity, …

                                FatObjectflow (Gen)


                                      OF_runtime (JDBC/CDO commons ?)

Más contenido relacionado

Destacado

INTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIALINTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIALarianadefaz
 
LCA NEW PRESENTATION
LCA NEW PRESENTATIONLCA NEW PRESENTATION
LCA NEW PRESENTATIONHECTOR TORRES
 
2008 07 02 Wege Zur Einbuergerung,Property=Publication File
2008 07 02 Wege Zur Einbuergerung,Property=Publication File2008 07 02 Wege Zur Einbuergerung,Property=Publication File
2008 07 02 Wege Zur Einbuergerung,Property=Publication Fileguest5daa03
 
TERCERA ESCUELA PARA PADRES 2015 PARVULARIA
TERCERA ESCUELA PARA PADRES 2015  PARVULARIATERCERA ESCUELA PARA PADRES 2015  PARVULARIA
TERCERA ESCUELA PARA PADRES 2015 PARVULARIAcolegiofarciaflamenco
 
CONSULT 2010 | Enger: Foerderung - Finanzierung fuer Existenzgruendung | Foe...
CONSULT 2010 | Enger: Foerderung - Finanzierung fuer Existenzgruendung |  Foe...CONSULT 2010 | Enger: Foerderung - Finanzierung fuer Existenzgruendung |  Foe...
CONSULT 2010 | Enger: Foerderung - Finanzierung fuer Existenzgruendung | Foe...Markus Tonn
 
Openerp In Deutsch
Openerp In DeutschOpenerp In Deutsch
Openerp In Deutschopenbig
 
Valoracion y tratamiento_sierra_guerrero_erendira
Valoracion y tratamiento_sierra_guerrero_erendiraValoracion y tratamiento_sierra_guerrero_erendira
Valoracion y tratamiento_sierra_guerrero_erendiraErendirasierra
 
Ecoturismo en veraguas 3
Ecoturismo en veraguas 3Ecoturismo en veraguas 3
Ecoturismo en veraguas 3Mimabis
 
Trabajo De Filosofia (Jhon Look)
Trabajo De Filosofia (Jhon Look)Trabajo De Filosofia (Jhon Look)
Trabajo De Filosofia (Jhon Look)Gina271032
 
Ecoturismo en veraguas salto el bejucal o chorro de los aizpruas 4
Ecoturismo en veraguas salto el bejucal o chorro de los aizpruas 4Ecoturismo en veraguas salto el bejucal o chorro de los aizpruas 4
Ecoturismo en veraguas salto el bejucal o chorro de los aizpruas 4Mimabis
 
CONSULT 2010 | Hamm: Foerderung - Finanzierung fuer Existenzgruendung | Foer...
CONSULT 2010 | Hamm: Foerderung - Finanzierung fuer Existenzgruendung |  Foer...CONSULT 2010 | Hamm: Foerderung - Finanzierung fuer Existenzgruendung |  Foer...
CONSULT 2010 | Hamm: Foerderung - Finanzierung fuer Existenzgruendung | Foer...Markus Tonn
 
Presentacion de Flickr en SlideShare
Presentacion de Flickr en SlideShare Presentacion de Flickr en SlideShare
Presentacion de Flickr en SlideShare Elizabeth-__2015
 
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013Ingo Hartlief FRICS
 

Destacado (18)

INTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIALINTELIGENCIA ARTIFICIAL
INTELIGENCIA ARTIFICIAL
 
LCA NEW PRESENTATION
LCA NEW PRESENTATIONLCA NEW PRESENTATION
LCA NEW PRESENTATION
 
2008 07 02 Wege Zur Einbuergerung,Property=Publication File
2008 07 02 Wege Zur Einbuergerung,Property=Publication File2008 07 02 Wege Zur Einbuergerung,Property=Publication File
2008 07 02 Wege Zur Einbuergerung,Property=Publication File
 
TERCERA ESCUELA PARA PADRES 2015 PARVULARIA
TERCERA ESCUELA PARA PADRES 2015  PARVULARIATERCERA ESCUELA PARA PADRES 2015  PARVULARIA
TERCERA ESCUELA PARA PADRES 2015 PARVULARIA
 
CONSULT 2010 | Enger: Foerderung - Finanzierung fuer Existenzgruendung | Foe...
CONSULT 2010 | Enger: Foerderung - Finanzierung fuer Existenzgruendung |  Foe...CONSULT 2010 | Enger: Foerderung - Finanzierung fuer Existenzgruendung |  Foe...
CONSULT 2010 | Enger: Foerderung - Finanzierung fuer Existenzgruendung | Foe...
 
Aralar lana
Aralar lanaAralar lana
Aralar lana
 
Openerp In Deutsch
Openerp In DeutschOpenerp In Deutsch
Openerp In Deutsch
 
Valoracion y tratamiento_sierra_guerrero_erendira
Valoracion y tratamiento_sierra_guerrero_erendiraValoracion y tratamiento_sierra_guerrero_erendira
Valoracion y tratamiento_sierra_guerrero_erendira
 
Ecoturismo en veraguas 3
Ecoturismo en veraguas 3Ecoturismo en veraguas 3
Ecoturismo en veraguas 3
 
Trabajo De Filosofia (Jhon Look)
Trabajo De Filosofia (Jhon Look)Trabajo De Filosofia (Jhon Look)
Trabajo De Filosofia (Jhon Look)
 
Ecoturismo en veraguas salto el bejucal o chorro de los aizpruas 4
Ecoturismo en veraguas salto el bejucal o chorro de los aizpruas 4Ecoturismo en veraguas salto el bejucal o chorro de los aizpruas 4
Ecoturismo en veraguas salto el bejucal o chorro de los aizpruas 4
 
CONSULT 2010 | Hamm: Foerderung - Finanzierung fuer Existenzgruendung | Foer...
CONSULT 2010 | Hamm: Foerderung - Finanzierung fuer Existenzgruendung |  Foer...CONSULT 2010 | Hamm: Foerderung - Finanzierung fuer Existenzgruendung |  Foer...
CONSULT 2010 | Hamm: Foerderung - Finanzierung fuer Existenzgruendung | Foer...
 
Presentacion de Flickr en SlideShare
Presentacion de Flickr en SlideShare Presentacion de Flickr en SlideShare
Presentacion de Flickr en SlideShare
 
Bericht 3
Bericht 3Bericht 3
Bericht 3
 
CV
CVCV
CV
 
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
Ingo Hartlief über den deutschen Büroimmobilien-Markt 2013
 
Crowdfunding in elf Schritten
Crowdfunding in elf SchrittenCrowdfunding in elf Schritten
Crowdfunding in elf Schritten
 
Klostersommer Programmheft 2009
Klostersommer Programmheft 2009Klostersommer Programmheft 2009
Klostersommer Programmheft 2009
 

Developing enterprise applications with dsl's

  • 1. Wo wollen wir hin? 1 (IT affine) Fachexperten sollen 2 zusammen ein System entwickeln, dass 3 sich langfristig anpassen lässt 4 und ständig Potentiale neuer IT- Technik erschließt. Konkret: Wirtschaftsinformatik-Studenten von Sowi rekrutieren
  • 2. Fachexperten Gemeinsames Verständnis & Nachvollziehbarkeit Prozess/Workflow zu einem Objekt (derAblauf) Eine Wizzard Eine Ansicht (Tabelle, Form, Tab) Undo/Redo – ein Kommando Nachvollziehbarkeit von SystemElementen & Abläufen = Dokumentation = EINE SPRACHE für beteiligte Personen
  • 3. Applikation + Bausteine Applikation besteht aus Datenstrukturen Command Prozess Undo / Redo Prozess als Akt? Rechnung, RechnungsPosition (Vorgang?) Lieferschein, LieferscheinPosition Condition WertSumme=LieferSumme Vertrag Conclusion „Auswählen“ BestandsKonto Conclusion „Abbruch“ Condition WertSumme=LieferSumme Exception occured Condition WertSumme=LieferSumme
  • 4. DatenStruktur + Commands Command Undo / Redo (Vorgang?) Conclusion OK Conclusion CANCEL Conclusion Exception Datenstrukturen Rechnung, RechnungsPosition Lieferschein, LieferscheinPosition Command = (1) Verändert Datenstruktur Vertrag BestandsKonto Tätigkeit? (2) Evtl. Datenstruktur speichern checkIn() addToSaveQueue()
  • 5. All or nothing! Command Kommando kann mehrere Seiten haben, wird aber in definiertem Zustand beendet: Undo/Redo - Möglichkeit Page1 Kommando erfolgreich (FINAL_OK_CONCLUSION) Page2 Kommando abgebrochen (FINAL_CANCEL_CONCLUSION) Kommando technische Ausnahme (FINAL_EXCEPTION_CONCLUSION)
  • 6. Applikation + Bausteine Prozess Prozess als Akt! Zustand des Prozesses im Akt vermerkt! (2) Conditions schaltet Prozess + enable/disable Commands + prüfen Rollen Datenstrukturen + Validieren Zustand Rechnung, RechnungsPosition Lieferschein, LieferscheinPosition Condition WertSumme=LieferSumme Vertrag BestandsKonto Condition WertSumme=LieferSumme Condition WertSumme=LieferSumme (1) Conditions prüfen Datenstruktur
  • 7. Prozess + Conditions Prozess Engine Rechnung Hinzufügen Command: Rechnung Hinzufügen Formular Condition (1) isEnabled? Erfolgreich ? Abbruch? State Ausnahme? 1 Condition State2 Conditions beschreiben, wie weiter im Prozess zu verfahren ist. Conditions beschreiben, ob Commands zu Verfügung stehen, oder nicht. Condition State3
  • 8. Datenstrukturen Entity Rechnung { decimal rechnungsSumme; // datetime createdAt; date rechnungsDatum; string bemerkung; status rechnungsStatus; Lieferant lieferant; // reference list<Positionen> positionen; // kann owning sein oder reference // als option angeben } rechnungsStatus = [ Angelegt, Abgeschlossen, Korrigiert, Archiviert ] // prozess status als option -> keine lese/schreibrechte direkt SORTED / UNSORTED / CONTAINMENT / OPPOSITE / DEPRECATED / SIZE / READONLY? / KEY / INDEX / NOTNULL? / NULLINIT / AUTOGEN_KEY by insert?
  • 9. Condition + Dokumentation process RechnungsKontrolle with RekoAkt rekoAkt on status rekoAkt.status { << process definition here >> condition RechnungsWertSumme=ProformaWertSumme „Die RechnungsSumme muss der ProformaWertSumme entsprechen um den Akt abschliessen zu können“ LM.testEqual(rekoAkt.rechnungWarenWert, rekoAkt.proformaWarenWert, rekoAkt.originalRechnung.aufbau.tolAbsolut) „Editieren sie den RechnungsPositionen / ProformaPositionen“ condition Administrator „Sie benötigen AdministratorRechte“ IMpreisService.hasRole(„REKO“, „ADMIN“) „Kontaktieren Sie ihren Vorgesetzen (Solveig?)“ condition kann ueberschreiben „Der Akt muss abgeschlossen sein und Sie benötigen Administrator-Rechte“ rekoAkt in RechnungsKontrolle is status Abgeschlossen && rekoAkt in RechnungsKontrolle is Administrator „?“ • checkt auf rekoAkt == null -> false • rekoAkt „VariableReference“ vom Prozess • is / is status als SprachErweiterung • Verschiedene Ansichten des Prozesses möglich (RollenAnsicht)
  • 10. Process = Spezifikation process RechnungsKontrolle with RekoAkt rekoAkt on status rekoAkt.status { Angelegt [ validationConditions ]: <<options>> on trigger [condition] Rechnung editieren on trigger [condition] Proforma editieren // -> auto [RechnungsWertSumme=ProformaWertSumme] -> Abgeschlossen Abgeschlossen [RechnungsWertSumme=ProformaWertSumme]: <<options>> on entry: [condition] Rechnung abschliessen // wenn command abbricht-> zustand nicht betreten <<command>> <<conclusion>> -> <<state>> on exit: // wenn command abbricht-> zustand nicht verlassen Korrigiert [ ]: END <<command>> }
  • 11. Interface as contract? Process Start Spezifikationen? process RechnungsKontrolle with RekoAkt rekoAkt on status rekoAkt.status { creators and read only views: on trigger [condition] RekoAkt aus Rechnung erzeugen on trigger [condition] RekoAkt leer erzeugen on trigger [condition] RekoAkte anzeigen Angelegt [ validationConditions ]: on trigger [condition] Rechnung editieren on trigger [condition] Proforma editieren auto [RechnungsWertSumme=ProformaWertSumme] -> Abgeschlossen Abgeschlossen [RechnungsWertSumme=ProformaWertSumme]: on entry: [condition] Rechnung abschliessen // wenn command abbricht-> zustand nicht betreten <<command>> <<conclusion>> -> <<state>> on exit: // wenn command abbricht-> zustand nicht verlassen }
  • 12. Vorgehensweise (1) Datenstrukturen + Prozess + Commands anlegen Überblick – nichts ausprogrammieren (2) Spezifikation (UseCase) anlegen und ausbauen Lernen -> Datenstrukturen ausbauen, Prozess verfeinern, abstimmen mir prozess owner? Input Objekte -> Ziel Objekte (3) Validierungsregeln fuer Objekte anlegen (TestKriterien) Lernen? (4) Mit Programmierer Kommandos implementieren (5) Mit Programmierer UserInterface implementiern (6) Spezifikation ausführen und mit Regeln prüfen (Ständig, auch bei Änderungen! ) (7) Mit Validierungsregeln Spezifikation testen, evtl. Regeln in Prozess übernehmen
  • 13. Spezifikation: UseCase Akt fuer10.000 Euro Prozess // Hier werden Input-Objekte durch Kommandos mit Fake-UserInterfaces erstellt, nicht durch object-Builder Command 1 Command RekoAkt rekoAkt = call RechnungsKontrolle.erstelle Akt( ) call RechnungsKontrolle.rechnung hinzufuegen(rekoAkt) Command 2 Command with page { conclusion „Save“ { Rechnung rechnung = getSelected(Rechnung.class) Command Command 3 rechnung.lieferant = … // rechnung.betrag = … return new arraylist{rechnung} }) Command n call RechnungsKontrolle.proforma wählen(rekoAkt) with page { conclusion „Select“ { Command n + 1 return repo.findProformasById(…) }) assert rekoAkt in RechnungsKontrolle is status Abgeschlossen RekoAkt Condition
  • 14. Spezifikation: UseCase Akt fuer10.000 Euro Prozess Command 1 Command Condition Command 2 Command Command Command 3 Command n Command n + 1 RekoAkt ? RekoAkt „von Hand erstellt“ im MPS
  • 15. Commands: Rechnung editieren Aufruf mit UI, TestUI, ohne UI Objekt ? Was ? Objekt? command Rechnung editieren (Rechnung rech) (new session, as tab) { // default, no new session, prompt << command fields >> command init: <statementlist> page „Rechnung editieren“ userinterface RechnungsKopfEditor form: // bound Object: list<Rechnung> page init: <statementlist> set scopes: <statementList> // set necessary scopes -> get them from ModelRepository conclusion: „Save“ (OK_CONCLUSION): flag „message here“ when (condition) abort „message here“ when (condition) // beendet dieses command mit conclusion exception done page 2 „Cancel“ (CANCEL_CONCLUSION): … … … catch(IOException) { }
  • 16. ModelRepository ModelRepository Reko checkIn book delete checkOut Delete + Update Queue ? scope / listView ModelRepository Stammdaten doit + transaction Delete + Update Queue ?
  • 17. Inhalt eines Model StammDaten Package = MODEL + VIRTUAL FOLDERS (1) Datenstrukturen (2) Repository + Mapping Artikel Abfragen Lieferant Mapping (3) Views für Artikel, (4) Ablauf + Commands Lieferanten - Commands -Tabellen - Workflow -Formulare - Berechtigung - DOKU + SPECIFICATION
  • 18. Daten & Datenstrukturen:  Datentypen  Value Objects / Entity  ModelRepository, Queries und Mappings  Cache Logik & Programmfluss:  Session  Commands  Prozess & Condition Anzeige und Steuerung  Application, Views und Links  Batchjob  Testing
  • 19. 3 DSLs – 2 Plain-Java Schnittstellen OBJECTFLOW 2012 morepo Forms Persistance-Layer UI Repository + Methods inside Repository mit myBatis + rawSQL ? Views + action links OBJECTFLOW 2015 Simple Java Interfaces Simple Java Interfaces ObjectFlow ModelRepository BusinessLogic (dependency gegen * JodaTime, * BaseLang, checkin ObjectNetworks Objects and Fields * Collections) checkout ObjectNetworks (RW / RO) update Accounts fast Processes / Workflows Commands Validation
  • 20. 3 DSLs in 2013 Language: Forms4 Language: ManMap UI Views Persistance + Query FatForms4 (Gen) SpringMiniMap (Gen) F4_runtime ( Vaadin/JavaFX 2 commons ??) MM_runtime F4_interfaces (plain java) MM_interfaces (plain java) Use as RIA (serialization) ?? Language: Objectflow process, command, condition, entity, … FatObjectflow (Gen) OF_runtime (JDBC/CDO commons ?)

Notas del editor

  1. Wirtschaftsinformatiker ? Problem Programmierer zu bekommen ?
  2. Was haben wir bisher erreicht? Was fehlt noch? Integrieren haben wir gut Teilweise Umgesetzt / sehr gut Forms3, Objectflow auch ok (beides braucht Erweiterungen und refactoring, wir wissen jetzt wo) Domäne fehlt Zusammenarbeiten fehlt