Successfully reported this slideshow.
Your SlideShare is downloading. ×

Monolithen mit ddd zerlegen

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad

Check these out next

1 of 63 Ad

Monolithen mit ddd zerlegen

Download to read offline

Fast jedes Softwaresystem wird mit guten Vorsätzen aber unter schwierigen Bedingungen entwickelt: Knappe Zeitvorgaben zwingen uns, schnelle Lösungen – Hacks – zu programmieren. Unterschiedliche Qualifikationen im Entwicklungsteam führen zu Code in ebenso unterschiedlicher Güte. Alter Code, den keiner mehr kennt, muss angepasst werden und vieles mehr. All das führt zu schlechtem, verknäultem Code, dem sogenannten Monolithen, der die Entwicklungskosten in Zukunft in die Höhe treibt und den Entwicklungsteams schlaflose Nächte bereitet. Mit Domain-Driven Design haben wir ein Werkzeug an der Hand, um solche Monolithen Schritt für Schritt zu zerlegen und wieder in den Bereich der beherrschbaren Wartungskosten zu bringen.

Fast jedes Softwaresystem wird mit guten Vorsätzen aber unter schwierigen Bedingungen entwickelt: Knappe Zeitvorgaben zwingen uns, schnelle Lösungen – Hacks – zu programmieren. Unterschiedliche Qualifikationen im Entwicklungsteam führen zu Code in ebenso unterschiedlicher Güte. Alter Code, den keiner mehr kennt, muss angepasst werden und vieles mehr. All das führt zu schlechtem, verknäultem Code, dem sogenannten Monolithen, der die Entwicklungskosten in Zukunft in die Höhe treibt und den Entwicklungsteams schlaflose Nächte bereitet. Mit Domain-Driven Design haben wir ein Werkzeug an der Hand, um solche Monolithen Schritt für Schritt zu zerlegen und wieder in den Bereich der beherrschbaren Wartungskosten zu bringen.

Advertisement
Advertisement

More Related Content

Slideshows for you (20)

Similar to Monolithen mit ddd zerlegen (20)

Advertisement
Advertisement

Recently uploaded (20)

Monolithen mit ddd zerlegen

  1. 1. WPS - Workplace Solutions GmbH //// Hans-Henny-Jahnn-Weg 29 //// 22085 HAMBURG Monolithen mit DDD zerlegen Dr. Carola Lilienthal @cairolali cl@wps.de
  2. 2. @cairolali cl@wps.de www.llsa.de
  3. 3. Software- Architektur Domain Storytelling Arbeitsplatz der Zukunft Individual- software Business-Software, die Spaß macht! WPS – Workplace Solutions GmbH
  4. 4. 24.01.2019 //// Seite 7WPS - Workplace Solutions GmbH 5 20 70 150 70 bis 15 Mio bis 5 Mio bis 1 Mio bis 500.000 bis 100.000
  5. 5. 463 tangled classes belonging to 10 different components
  6. 6. 24.01.2019 //// Seite 11WPS - Workplace Solutions GmbH
  7. 7. 24.01.2019 //// Seite 12WPS - Workplace Solutions GmbH MODULARITY MATURITY INDEX (MMI) 612.869 LOC 14.756.435 LOC 252.062 LOC 804.093 LOC 543.388 LOC 1.035.668 LOC 486.358 LOC 175.258 LOC 42.311 LOC 193.383 LOC 643.466 LOC 245.754 LOC 2.890.204 LOC 141.696 LOC 512.086 LOC 9.988.363 LOC 200.591 LOC 922.949 LOC 22.658 LOC 663.862 LOC 3.270.188 LOC 1.521.357 LOC 0 2 4 6 8 10
  8. 8. Team Head Team Tail Team Body Team Leg
  9. 9. Team Head Team Tail Team Body Team Leg
  10. 10. Team Head Team Tail Team Body Team Leg
  11. 11. Team Head Team Tail Team Body Team Leg
  12. 12. Team Emma Team Berta Team Erna Team Lisl
  13. 13. 24.01.2019 //// Seite 19WPS - Workplace Solutions GmbH WAS IST DOMAIN-DRIVEN DESIGN? ▪ Eine Herangehensweise an die Entwicklung von Software, die dafür sorgt, dass die Software tief in der Domäne verwurzelt ist. ▪ Das gelingt durch die Umsetzung der Ubiquitous Language in mehreren kontextbezogenen Domänenmodellen ▪ Der Kontext dieser Modelle heißt Bounded Context Software Domäne
  14. 14. 24.01.2019 //// Seite 20WPS - Workplace Solutions GmbH LIVING IN A BOX Setze explizite Grenzen … ▪ Ein Team pro fachlicher Subdomäne ▪ Erhalte die Konsistenz innerhalb der Grenzen ▪ Keine Ablenkung durch äußere Angelegenheiten → Freie Gestaltung eines Teilmodells durch ein Team ▪ Kenne die Restriktionen ▪ Bleibe innerhalb der Modellgrenzen ▪ Arbeite schnell in Deinen Grenzen
  15. 15. 24.01.2019 //// Seite 21WPS - Workplace Solutions GmbH JEDER BOUNDED CONTEXT HAT SEIN EIGENES MODELL ZIEL: ▪ Jedes Team kann an seinem eigenen Domänen-Modell arbeiten ▪ Man kennt seine Grenzen ▪ Man bleibt in seinen Grenzen
  16. 16. 24.01.2019 //// Seite 22WPS - Workplace Solutions GmbH KLASSISCHES DOMÄNENMODELL – REALITÄT ▪ Mehrere vermischte mentale Modelle ▪ Unbeherrschbare Komplexität ▪ Abhängigkeiten unter den Teams Foto: CMS Higgs-even/Wikipedia/CC-BY-SA-3.0
  17. 17. 🤦‍♂️
  18. 18. 24.01.2019 //// Seite 27WPS - Workplace Solutions GmbH JEDER BOUNDED CONTEXT HAT SEIN EIGENES MODELL ZIEL: ▪ Jedes Team kann an seinem eigenen Domänen-Modell arbeiten ▪ Man kennt seine Grenzen ▪ Man bleibt in seinen Grenzen
  19. 19. 463 tangled classes belonging to 10 different components
  20. 20. 24.01.2019 //// Seite 30WPS - Workplace Solutions GmbH MODULITH FIRST ▪Ausschneiden eines MS aus einem Monolithen ist nur möglich, wenn dieser fachliche modularisiert ist User Interface Domain Application Fachliches Modul B Fachliches Modul A So wenig Beziehungen wie möglich! TechnischeSchichtung Fachliches Modul C
  21. 21. 24.01.2019 //// Seite 32WPS - Workplace Solutions GmbH WIE SCHNEIDE ICH MEINE DOMÄNE? ▪ Nach Abteilungen in der Organisation bzw. Gruppen von Domänenexperten ▪ Nach Unterschieden in der Verwendung/Definition von Schlüsselkonzepten in der Domäne ▪ Nach Grenzen im Geschäftsprozess, die die Domänenexperten beschreiben ▪ Information läuft in eine Richtung ▪ Prozesse werden in unterschiedlichen Rhythmen ausgeführt ▪ Prozesse werden von verschiedenen Triggern ausgelöst.
  22. 22. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN
  23. 23. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Trigger
  24. 24. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Einmal pro Woche Trigger
  25. 25. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Einmal pro Woche Immer wenn ein Kunde kommt Trigger
  26. 26. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Einmal pro Woche Immer wenn ein Kunde kommt Abteilung Kinomanagement Abteilung Kartenverkauf Trigger
  27. 27. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger Einmal pro Woche Immer wenn ein Kunde kommt Trigger Informationsfluss Abteilung Kinomanagement Abteilung Kartenverkauf
  28. 28. KASSEN- MITARBEITER KINO- BESUCHER WOCHENPLAN << in Arbeit >> GEWÜNSCHTE ANZAHL PLÄTZE SAALPLAN SAALPLAN- STAPEL VERKAUFTE PLÄTZE KARTEN VORSTELLUNG GEFUNDENE PLÄTZE SAALPLAN SAALPLAN WOCHENPLAN << finalisiert >> VERLEIHER KINO- MANAGER WERBE- AGENTUR BUCHUNGSPLAN DER WERBUNG VORGABEN FÜR FILME GESAMTDEUTSCHE BESUCHERZAHLEN VERFÜGBARKEIT VON FILMEN 1 6 2 10 5 3 8 4 7 9 11 12 13 14 SAALPLAN 15 BEGINNT SEINE ARBEIT AN DEM ÜBERPRÜFT VERHANDELT MIT FINALISIERT DEN ERZEUGT FÜR DIE NÄCHSTE WOCHE GELDSUMME KINOKARTEN BEZAHLTE KINOKARTEN FRAGT NACH FÜR EINE ÖFFNET SCHLIESST AUS DEM BIETET AN BEZAHLT AN SUCHT IM IM MARKIERT DRUCKT AUS ÜBERGIBT AN Trigger TriggerEinmal pro Woche Immer wenn ein Kunde kommt Abteilung Kinomanagement Abteilung Kartenverkauf WOCHENPLAN << ausgedruckt >> Informationsfluss
  29. 29. Wochenplanungsservice •FilmInSaalEinplanen •WerbungZuFilmPlanen •ErwarteteBesucherzahl •FinalPläneErzeugen Kartenverkaufsservice •ZeitenZuFilmSuchen •PlätzeSucheInSaal •PlätzeReservieren •PlätzeVerkaufen UI Wochenplanung UI Kartenverkauf UI Wochenplanung UI Kartenverkauf Wochenplanservice •ZeitenZuFilmSuchen •FilmInSaalEinplanen •WerbungZuFilmPlanen •ErwarteteBesucherzahl •FinalPläneErzeugen Saalplanservice •PlätzeSucheInSaal •PlätzeAlsReserviertMark •PlätzeAlsVerkauftMark •PläneErzeugen Bounded Context Kinomanagement Bounded Context Kartenverkauf Bounded Context Wochenplan Bounded Context Saalplan Bounded Context Kinokarte Bounded Contexts nach Entities mit synchroner Kopplung Bounded Contexts nach fachlichen Prozesse mit asynchroner Kopplung
  30. 30. @cairolali SIZE MATTERS! ▪ Ein Bounded Context für ein Two-Pizza-Team ✘
  31. 31. @cairolali UNEVEN MODULES Ein großer Monolith mit Satelliten 950.860 LOC 84.808 LOC
  32. 32. @cairolali 128 BUILD UNITS MIT ANZAHL KLASSEN ▪ 3 Mio von 9 Mio LOC ▪ 1/3 des Systems
  33. 33. @cairolali 5.270 KLASSEN IN EINEM ZYKLUS IN EINER BUILDUNIT
  34. 34. 24.01.2019 //// Seite 46WPS - Workplace Solutions GmbH MOB ARCHITECTING – ARCHITEKTURANALYSE IM TEAM
  35. 35. 24.01.2019 //// Seite 47WPS - Workplace Solutions GmbH FACHLICHE ZERLEGUNG: WIE GEHEN WIR VOR? Refactorings Analyse + Diskussion Maßnahmen festlegen Abbildungs- Vorschrift Ist- Architektur Rekonstruktion Source- Code Fachliche Module Bounded Contexts Architektur- alternativen • Priorisierung der Maßnahmen • Einplanung in den Entwicklungszyklus Verletzungen • Mit den Domänenexperten identifiziert • Mit Fachsprachen + Prozessanalyse abgeglichen
  36. 36. 24.01.2019 //// Seite 48WPS - Workplace Solutions GmbH MODULITH FIRST ▪Ausschneiden eines MS aus einem Monolithen ist nur möglich, wenn dieser fachliche modularisiert ist User Interface Domain Application Fachliches Modul B Fachliches Modul A So wenig Beziehungen wie möglich! TechnischeSchichtung Fachliches Modul C
  37. 37. 24.01.2019 //// Seite 49WPS - Workplace Solutions GmbH TAKTISCHES UND STRATEGISCHES MODELLIEREN Strategisches Modellieren (im Großen) ▪ Teile die Domäne in getrennte Bounded Contexts auf ▪ Jeder BC hat seine eigene ubiquitous language und sein eigenes Domänenmodell Taktisches Modellieren (im Kleinen) ▪ Innerhalb eines Bounded Context ▪ Ubiquitous Language als Grundlage ▪ Building Blocks: Entity, Value Object, Aggregate, Service, Repository, Factory
  38. 38. 24.01.2019 //// Seite 50WPS - Workplace Solutions GmbH BUILDING BLOCKS = MUSTER FÜR DIE MIKRO ARCHITEKTUR User Interface Domain Application SchichtungdurchMuster Bounded Context Repository Factory Model View ValueObject Service Entity/ Aggregate Controller
  39. 39. 24.01.2019 //// Seite 51WPS - Workplace Solutions GmbH 463 Klassen aus über 50 Packages
  40. 40. 24.01.2019 //// Seite 52WPS - Workplace Solutions GmbH entities valueObjects
  41. 41. 24.01.2019 //// Seite 53WPS - Workplace Solutions GmbH entities valueObjects
  42. 42. 24.01.2019 //// Seite 54WPS - Workplace Solutions GmbH 184 Klassen in einem Zyklus und mehrere Kleine Zyklen
  43. 43. 24.01.2019 //// Seite 55WPS - Workplace Solutions GmbH WAS WIR NICHT BAUEN WOLLEN ✘ ANEMIC DOMAIN MODEL ▪ „blutarme“ fachliche Objekte ▪ Schnittstelle ohne Aussagekraft ▪ aus Gettern/Settern ▪ Viele String Parameter ▪ Eigentliche Fachlichkeit außerhalb Entities + Value Objects in Services oder im UI ▪ Viele Util, Helper und Manager Klassen
  44. 44. 24.01.2019 //// Seite 56WPS - Workplace Solutions GmbH ANEMIC → FEHLENDE ROBUSTHEIT ▪ Designschulden ▪ Unklarer, schwer verständlicher Entwurf ▪ Verteilte Fachlichkeit ▪ Copy & Paste - Programmierung → Teure Wartung → Duplizierter Code → Viele Refactorings → Schlechte Testbarkeit
  45. 45. 24.01.2019 //// Seite 57WPS - Workplace Solutions GmbH EIN BANKKONTO public class Account { private int _balance; public int getBalance() { return _balance; } public void setBalance(int balance) { _balance = balance; } } ✘ Schlecht: Der Kontostand kann auf beliebigen Wert gesetzt werden
  46. 46. 24.01.2019 //// Seite 58WPS - Workplace Solutions GmbH EIN BANKKONTO – ERSTES REFACTORING public class Account { private int _balance; public int getBalance() { return _balance; } public void deposit(int amount) { _balance += amount; } public void withdraw(int amount) { _balance -= amount; } } Besser: Methoden mit fachlichem Verhalten und Namen
  47. 47. 24.01.2019 //// Seite 59WPS - Workplace Solutions GmbH JA, ABER… public class Account { // ... public void withdraw(int amount) { _balance -= amount; } } Kann ich einen Negativen Betrag abheben? In EUR oder GBP oder … ?
  48. 48. 24.01.2019 //// Seite 60WPS - Workplace Solutions GmbH EIN EIGENER VALUEOBEJCT BETRAG public class Amount { private final int _amount; private final Currency _currency; public Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } }
  49. 49. 24.01.2019 //// Seite 61WPS - Workplace Solutions GmbH EIN EIGENER VALUEOBEJCT BETRAG public class Amount { private final int _amount; private final Currency _currency; public Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } @Override public boolean equals(Object other) { return _amount == ((Amount) other)._amount && _currency.equals(((Amount) other)._currency); } }
  50. 50. 24.01.2019 //// Seite 62WPS - Workplace Solutions GmbH EIN EIGENER VALUEOBEJCT BETRAG public class Amount { private final int _amount; private final Currency _currency; public Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } @Override public boolean equals(Object other) { return _amount == ((Amount) other)._amount && _currency.equals(((Amount) other)._currency); } // hashCode() }
  51. 51. 24.01.2019 //// Seite 63WPS - Workplace Solutions GmbH EIN EIGENER VALUEOBJECT BETRAG public class Amount { private final int _amount; private final Currency _currency; public Amount(int amount, Currency currency) { _amount = amount; _currency = currency; } public Amount add(Amount otherAmount) { return new Amount(_amount + otherAmount._amount, _currency); } } Der neueTyp hat richtiges fachliches Verhalten
  52. 52. 24.01.2019 //// Seite 64WPS - Workplace Solutions GmbH EIN BANKKONTO – ZWEITES REFACTORING public class Account { private Amount _balance; public Amount getBalance() { return _balance; } public void deposit(Amount amount) { _balance = _balance.add(amount); } public void withdraw(Amount amount) { _balance = _balance.subtract(amount); } } Jetzt können wir den Betrags-Typ verwenden
  53. 53. 24.01.2019 //// Seite 65WPS - Workplace Solutions GmbH DOMÄNEN KLASSEN ZERLEGEN ODER KOPIEREN! User Interface Domain Application Bounded Context Model View ValueObject Service Entity/ Aggregate Controller Bounded Context Model View ValueObject Service Entity/ Aggregate Controller Bounded Context Model View ValueObject Service Entity/ Aggregate Controller
  54. 54. 24.01.2019 //// Seite 66WPS - Workplace Solutions GmbH WO STEHEN WIR? 612.869 LOC 14.756.435 LOC 252.062 LOC 804.093 LOC 543.388 LOC 1.035.668 LOC 486.358 LOC 175.258 LOC 42.311 LOC 193.383 LOC 643.466 LOC 245.754 LOC 2.890.204 LOC 141.696 LOC 512.086 LOC 9.988.363 LOC 200.591 LOC 922.949 LOC 22.658 LOC 663.862 LOC 3.270.188 LOC 1.521.357 LOC 0 2 4 6 8 10 Der MODULARITY MATURITY INDEX (MMI)
  55. 55. @cairolali MEETUPS @DDDger
  56. 56. @cairolali KONFERENZEN Germanys first DDD conference
  57. 57. Schulungen zu Architektur und Domain-Driven Design Architekturanalyse mit Ihrem Team wps.de
  58. 58. 24.01.2019 //// Seite 71WPS - Workplace Solutions GmbH @cairolali www.llsa.de @hschwentner

×