Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Domain-Driven Design (DDD): Implementierung einer universellen Turing-Maschine

26 Aufrufe

Veröffentlicht am

Vortrag auf dem Expertenkreis Java, 16.01.2020, GEDOPLAN GmbH
Jens Seekamp, GEDOPLAN GmbH

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

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

Domain-Driven Design (DDD): Implementierung einer universellen Turing-Maschine

  1. 1. Domain-Driven Design (DDD) Implementierung einer universellen Turing-Maschine Jens Seekamp Enterprise Java Team, GEDOPLAN GmbH
  2. 2. Auf was lässt sich DDD anwenden? Domain-Driven Design (DDD) 2 Domain-Driven Design: • Logistik-Branche • Referenz-Architektur • Java EE / Jakarta EE Changelog für Git: • DDD anwendbar? • Domänen-Objekte?
  3. 3. Alan M. Turing (1912 - 1954) Domain-Driven Design (DDD) 3 Enigma-Entschlüsselung Algorithmus / Berechenbarkeit
  4. 4. Domain: Turing-Maschine Domain-Driven Design (DDD) 4 http://aturingmachine.com/examplesSub.php
  5. 5. Anforderung: Simulator für Turing-Maschinen Domain-Driven Design (DDD) 5 private void moveHead(boolean dir) { if (dir) { rwHeadPos++; if (rwHeadPos == length) { length *= 2; tape = Arrays.copyOf(tape, length); } } else { if (rwHeadPos > 0) rwHeadPos--; } } typischer Source-Code • Verständlichkeit? • Datentypen? • Wartbarkeit? • Selbst-Dokumentation?
  6. 6. Domain Model: abstraktes Modell der fachlichen Domäne DDD-Kernaussagen objektorientiertes Entwurfskonzept für komplexe, unternehmensweite Anwendungs-Systeme Fokus der Software-Entwicklung auf Geschäftslogik der Domäne Software-Entwicklungsprozess basiert auf Domänen-Modell Zusammenarbeit zwischen technischen und fachlichen Experten Domain-Driven Design (DDD) 6 universelle Turing-Maschine mit DDD-Ansatz implementieren
  7. 7. Ubiquitous Language: fachliche Projekt-Sprache Domain-Driven Design (DDD) 7 A. Turing, 1936 Domain Storytelling
  8. 8. Aufgabenstellung: Quadrat-Funktion Realisierung als Abfolge von Turing-Maschinen DecimalToBinaryConverter 6 011 ReverseBinary 011 110 CopyBinary 110 110s110 BinaryMultiplication 110s110 100100 BinaryToDecimalConverter 100100 36 Domain-Driven Design (DDD) 8 𝑓: ℕ → ℕ, 𝑛 ⟼ 𝑛2
  9. 9. Software-Zerlegung gemäß DDD Bounded Context abgeschlossener (self-contained) Teilbereich des Domain Model Aggregate fachlogische Gruppierung von Daten und Verhalten Building Block Trennung von Verantwortlichkeiten Entwurfsmuster für Klassen Domain-Driven Design (DDD) 9
  10. 10. Domain Aggregate Turing Machine Schritt 1: Überführungsfunktion Funktionsargument (linke Seite) Configuration Funktionswert (rechte Seite) Behaviour Übergang Transition "Anweisung" Übergangstabelle TransitionFunction "Algorithmus" Domain-Driven Design (DDD) 10 qInit, 1 qInit, 0, R qInit, 0 qInit, 1, R qInit, # q1, #, L q1, 1 q1, 1, L q1, 0 q1, 0, L q1, # qAccept, #, R Beispiel: FlipBinary
  11. 11. Building Blocks Domain Value / Domain Attribute Domain-Driven Design (DDD) 11 • Geschäftsobjekt • immutable • fachliches Attribut • immutable
  12. 12. Building Blocks Domain Value / Domain Attribute Domain-Driven Design (DDD) 12 • JPA-Embeddable • Bean Validation
  13. 13. Building Blocks Domain Value / Domain Attribute Domain-Driven Design (DDD) 13 Geschäftsobjekt mit Verhalten
  14. 14. Building Blocks Domain Value / Domain Attribute Domain-Driven Design (DDD) 14 DDD-Framework
  15. 15. Building Blocks Domain Value / Domain Attribute Domain-Driven Design (DDD) 15
  16. 16. Building Blocks Domain Entity / Domain Entity Identifier Domain-Driven Design (DDD) 16 • Primärschlüssel, immutable • JPA-Embeddable • Geschäftsobjekt mit Identität • JPA-Entity mit CDI-Injektion
  17. 17. Building Block Domain Value Domain-Driven Design (DDD) 17 fachliches Verhalten • Anwendung der Überführungsfunktion
  18. 18. Domain Aggregate Turing Machine Schritt 2: Turing-Maschinen und deren Erzeugung Turing-Maschine TuringMachine "Programm" Bezeichner TuringMachineName "Programmname" Erzeugungsmechanismus TuringMachineFactory Domain-Driven Design (DDD) 18 FlipBinary
  19. 19. Building Block Domain Aggregate Domain-Driven Design (DDD) 19 JPA-Relationship
  20. 20. Building Blocks Domain Factory / Composite Domain Object Domain-Driven Design (DDD) 20 • Fabrik für transiente Geschäftsobjekte • CDI-Bean • Komposition fachlicher Daten • POJO (JavaBeans)
  21. 21. Domain Aggregate Turing Machine Schritt 3: Coding und Compiling von Turing-Maschinen Parsing der JSON-Kodierung TuringMachineParser Compiling einer Turing-Maschine TuringMachineCompiler Domain-Driven Design (DDD) 21 FlipBinary { "name": "FlipBinary", "description": "Turing-Maschine ...", "initial": "qInit", "accepting": [ "qAccept" ], "transitions": [ { "comment": "0 und 1 vertauschen und nach rechts bewegen", "actual": "qInit", "scanned": "1", "successor": "qInit", "printed": "0", "motion": "R" }, { "comment": "", "actual": "qInit", "scanned": "0", "successor": "qInit", "printed": "1", "motion": "R" }, ... "Programmiersprache"
  22. 22. Clean Architecture domain application adapter Domain-Driven Design (DDD) 22 DDD Geschäftslogik Technologien Dependency Rule Dependency Inversion
  23. 23. Building Block Domain Service Domain-Driven Design (DDD) 23 • Parsing-Funktionalität • rekursiver Abstieg über JSON-Struktur • CDI-Bean im Paket adapter Dateipfad zur JSON-Datei
  24. 24. Building Block Domain Service Domain-Driven Design (DDD) 24 • Compiling-Funktionalität • Orchestrierung der Geschäftslogik • CDI-Bean mit Co-Worker-Injektion
  25. 25. Domain Aggregate Complete Configuration Schritt 4: Turing-Band und Gesamtzustand Band der Turing-Maschine Tape "Speicher" Zustand der Turing-Maschine CompleteConfiguration Eingabewort InputSequence Ausgabewort ComputedSequence Domain-Driven Design (DDD) 25 q47
  26. 26. Domain Aggregate Complete Configuration Domain-Driven Design (DDD) 26 Rich Domain Objects • Geschäftsobjekte mit reichhaltiger Funktionalität
  27. 27. Domain Aggregate Complete Configuration Schritt 5: Ausführung einer Turing-Maschine Interpreter TuringProcessingUnit "Prozessor" Ereignis TransitionWasFiredEvent Domain-Driven Design (DDD) 27
  28. 28. Domain Aggregate Complete Configuration Domain-Driven Design (DDD) 28 • Interpreter-Funktionalität • CDI-Bean • Senden eines fachlichen Ereignisses • CDI-Event • fachliche Daten • immutable
  29. 29. Building Block Domain Repository Domain-Driven Design (DDD) 29 • Empfangen eines fachlichen Ereignisses • CDI-Event • vordefinierte CRUD-Funktionalität • JPA-Entity-Manager • Persistenz-Funktionalität • CDI-Bean im Paket adapter
  30. 30. Domain Aggregate Universal Turing Machine Schritt 6: universelle Turing-Maschine UniversalTuringMachine "Computer" UniversalTuringMachineFactory Domain-Driven Design (DDD) 30 1011 qInit, 1 qInit, 0, R qInit, 0 qInit, 1, R qInit, # q1, #, L q1, 1 q1, 1, L q1, 0 q1, 0, L q1, # qAccept, #, R 0100 FlipBinary
  31. 31. Domain Aggregate Universal Turing Machine Domain-Driven Design (DDD) 31 Entity mit Co-Worker-Injektion
  32. 32. Building Block Application Service Schritt 7: Aufruf der universellen Turing-Maschine Anwendungsfall TuringMachineExecutionAppSvc Domain-Driven Design (DDD) 32 execute a Turing Machine execute a sequence of Turing Machines
  33. 33. class utm.application «Application Service» TuringMachineExecutionAppSvc - factory :UniversalTuringMachineFactory + callUniversalTuringMachineWith(TuringMachineSource, InputSequence) :ComputedSequence + callUniversalTuringMachineWith(List<TuringMachineSource>, InputSequence) :ComputedSequence - createUniversalTuringMachine(TuringMachineSource, InputSequence) :UniversalTuringMachine ApplicationService Building Block Application Service Domain-Driven Design (DDD) 33 • Geschäftsvorgänge, transaktional • Orchestrierung der Domänen-Logik • CDI-Bean im Paket application
  34. 34. Building Block Presenter Schritt 8: Graphical User Interface (GUI) JavaFX-Dialog UniversalTuringMachinePresenter Bedienung der universellen Turing-Maschine Observer für die ausgeführten Transitionen Visualisierung der Ausführung auf dem Turing-Band Domain-Driven Design (DDD) 34 • MVC-Funktionalität • CDI-Bean im Paket adapter
  35. 35. Building Block Presenter Domain-Driven Design (DDD) 35

×