Softwaremodularisierung - aber wie? - OIO

Die Seite wird erstellt Barbara Baumann
 
WEITER LESEN
Softwaremodularisierung - aber wie? - OIO
Softwaremodularisierung
                                                                    – aber wie?
                                                                             Empfehlungen mit und gegen den Trend

                                Orientation in Objects GmbH

                                Weinheimer Str. 68
                                68309 Mannheim

                                www.oio.de
Version:          19.1          info@oio.de

      Ihre Sprecher

                                          Christian Dedek & Thorsten Maier

                                                                 Trainer, Berater, Entwickler

                                                                                                                Christian Dedek   @ThorstenMaier

© Orientation in Objects GmbH                                                 Softwaremodularisierung – aber wie?                            2

                                                                                                                                                   1
Softwaremodularisierung - aber wie? - OIO
© Orientation in Objects GmbH             Softwaremodularisierung – aber wie?   3

                                   Anwender brauchen
                                keine Modularisierung

© Orientation in Objects GmbH             Softwaremodularisierung – aber wie?   4

                                                                                    2
Softwaremodularisierung - aber wie? - OIO
Modul
                                                  Modul
                                  Modul                                                                  Modul

                                              Modul           Modul
                                Modul                                                                   Modul

                                          Modul           Modul

© Orientation in Objects GmbH                                     Softwaremodularisierung – aber wie?            5

                                                                  Modul
                                                  Modul
                                  Modul                                                                  Modul

                                              Modul           Modul
                                Modul                                                                   Modul

                                          Modul           Modul

© Orientation in Objects GmbH                                     Softwaremodularisierung – aber wie?            6

                                                                                                                     3
Softwaremodularisierung - aber wie? - OIO
Modul
                                                  Modul
                                  Modul                                                                  Modul

                                               Modul          Modul
                                Modul                                                                   Modul

                                          Modul           Modul

                                                                                                                 Modul
                                                                                                 Modul

© Orientation in Objects GmbH                                     Softwaremodularisierung – aber wie?                    7

                                Router Service               Search Service

                                          Product Service

                                        Meta Info Service

© Orientation in Objects GmbH                                     Softwaremodularisierung – aber wie?                    8

                                                                                                                             4
Softwaremodularisierung - aber wie? - OIO
Kapselung
                                „Ich setze ein Modul in einem anderen Kontext ein
                                             und es funktioniert nicht“

© Orientation in Objects GmbH                              Softwaremodularisierung – aber wie?   9

                                          Cluelessness
                                                 „Ahnungslosigkeit“

© Orientation in Objects GmbH                              Softwaremodularisierung – aber wie?   10

                                                                                                      5
Softwaremodularisierung - aber wie? - OIO
© Orientation in Objects GmbH                                   Softwaremodularisierung – aber wie?   11

                                  Auswirkungen von
                                Modularisierung
                                    „Mit Modularisierung kann
                                      man kein Geld sparen“

© Orientation in Objects GmbH                                   Softwaremodularisierung – aber wie?   12

                                                                                                           6
Softwaremodularisierung - aber wie? - OIO
© Orientation in Objects GmbH     Softwaremodularisierung – aber wie?   13

                                 ①

                                Java

© Orientation in Objects GmbH     Softwaremodularisierung – aber wie?   14

                                                                             7
Softwaremodularisierung - aber wie? - OIO
„Modularisierung“ in Java

      •       Compilation Units = Abstrakte Datentypen (Klassen, Interfaces) sind in Java grundlegende
              Modultypen auf Sprachebene
                – Members(fields, methods) sind für andere Module sichtbar
                           • Können ‚private‘ bzw. protected gekapselt werden
      •       Packages bilden auf Sprachebene einen Modultypus eines höheren Abstraktionslevels
                – Package gruppieren abstrakte Datentypen
                – Details der Datentypen werden verborgen/gekapselt
                           • können mit ‚public‘ Deklaration in die ‚Schnittstelle‘ des Package veröffentlicht werden
      •       Abhängigkeiten

© Orientation in Objects GmbH                                                     Softwaremodularisierung – aber wie?   15

      Modulabhängigkeiten in Java

      •       Sourcecode definiert Abhängigkeit auf abstrakten Datentyp durch import Deklaration im
              Modulconsumer
      •       Auflösung der Deklaration zu 2 Zeitpunkten relevant
                – Compile-time
                – Runtime
      •       Zuordnung des Datentyps wird final auf Compilation-Unit zurückgeführt
                – Gruppierung der Compilation-Units in Verzeichnissen bzw. Archiven soll Konfiguration erleichtern
                – Flexibles Zuordnen der .class-Resourcen durch Classpath-Variable möglich
                           • zu beiden Zeitpunkten
                           • In verschiedenen Umgebungen
      •       Laufzeitauflösung durch Classloader-Abstraktion erweiterbar
      •       Definition eines standardisierten Archivformats zur Gruppierung von Datentypen und Packages sollte
              Modulbildung erleichtern

© Orientation in Objects GmbH                                                     Softwaremodularisierung – aber wie?   16

                                                                                                                             8
Softwaremodularisierung - aber wie? - OIO
Modularisierung und Reflection

      •       Reflection ist ein Javakonzept zur metadatenbasierten Nutzung von abstrakten Datentypen
                – erlaubt Flexibilisierung eines Modulconsumers gegenüber einem benutzten Modul
                           • unter Aufgabe der Typsicherheit
                – dynamic Proxy ermöglicht sogar Flexibilisierung eines Modulproviders

      •       Leider durchbricht Reflection potentiell alle Modulkapselungen

© Orientation in Objects GmbH                                                 Softwaremodularisierung – aber wie?            17

      Java – Vorteile

      •       Klare idiomatische Modulinterfacedeklarationen möglich
                –      public final class
                –      public final method
                –      public abstract class
                –      protected abstract method
      •       Hohe Flexibilität bei der Zuordnung von Modulen zu Modulconsumern
                – viele mögliche Eingriffsvektoren über Classpathvariable
                           • Multiple URLS
                           • Konkurrierende Paketierung in Jars möglich
                           • Einfache Trennung von Compile Sets und Runtime Sets möglich
                – Aktualisierung bzw. Bugfixing von Modulen zur Laufzeit durch Austausch der Compilation Unit sehr einfach
      •       Subclassing von Classloadern erlaubt komplexere Modularchitekturen
      •       Inkompatibilität von Modulconsumer und Modulprovider wird explizit (frühzeitig) abgefangen
                – Compile-Time Fehler
                – Laufzeit Exception

© Orientation in Objects GmbH                                                 Softwaremodularisierung – aber wie?            18

                                                                                                                                  9
Softwaremodularisierung - aber wie? - OIO
Java – Nachteile

      •       unklare bzw. schwer lesbare Idiome in Modulinterface nicht ausgeschlossen
                – public, protected, public abstract members
                – public interface
      •       keine Substruktur in größerer Packages möglich
                – Subpackages heben die Sichtbarkeitsebene auf public(protected)
      •       kein Support für eine explizite Versionssemantik
                – keine Information im Sourcecode
                – keine standardisierte Semantik
      •       Trennung von Compiletime und Runtime Auflösung fehlerträchtig – sog.„JAR-Hell“
                – Inkompatibilität von Modulversionen treten erst zur Laufzeit auf
                – flexible Konfiguration erhöht potentielle Fehlerquellen
                – erweiterbares Classloading kann zusätzliche Fehlerkategorien öffnen
      •       Moduldesign durch Reflection aushebelbar

© Orientation in Objects GmbH                                                 Softwaremodularisierung – aber wie?   19

      Java – Zielarchitektur

      •       Grobgranulare APIs
                – z.B. JDK, JEE bestehen aus schmalem Set von JARs
      •       keine komplexen modularen Sets als Zielsysteme
                – Kleine Anzahl von JARS
                – Keine tiefgeschichteten Modulabhängigkeiten
      •       Open Source Entwicklung
                – Modulconsumer kann Deklaration des Modulinterface jederzeit einsehen
                – notfalls selbst kompilieren
                – Nutzung Modulen in voller Freiheit
                           • Auf eigene Verantwortung
      •       Versionierung unnötig bzw. binäre Abwärtskompatibilität von Modulinterfaces wird sichergestellt
                – Klare Rollentrennung
                           • Modulprovider garantiert Kompatibilität
                           • Moduluser trägt Verantwortung für kompatiblen Modulset und ev. notwendiges Bugfxing

© Orientation in Objects GmbH                                                 Softwaremodularisierung – aber wie?   20

                                                                                                                         10
②

                                                       OSGI

© Orientation in Objects GmbH                                        Softwaremodularisierung – aber wie?                                 21

      OSGI

      •       Erweiterung des Java Standards in einer formalen Spezifikation mit verschieden Implementierungen
                – JAR-Files als sog. Bundles
      •       Erweiterungen in META-INF/MANIFEST.MF
                –      Bundlename
                –      Versionssemantik
                –      Import packages
                –      Export Packages             Bundle: Main                                              Bundle: Service
                                               package                                                     package de.oio.service.api;
                                               de.oio.application;
                                                                                       import
                                                                                                                MeineAPI
                                                        Main
                                                                                                           package de.oio.service.spi;

                                                                                                                MeineImpl

© Orientation in Objects GmbH                                        Softwaremodularisierung – aber wie?                                 22

                                                                                                                                              11
MANIFEST.MF als Moduldeskriptor

      •       in META-INF/MANIFEST. im JAR
                – vgl. Java Standard

                –      Bsp:
                –      Manifest-Version: 1.0
                –      Bundle-Activator: de.oio.service.osgi.Activator
                –      Import-Package: javax.xml.bind,org.apache.commons.logging,org.osgi.framework
                –      Export-Package: oio.application.service.api;version=1.23
                –      Bundle-Name: oioservice
                –      Bundle-SymbolicName: de.oio.service-osgi

© Orientation in Objects GmbH                                          Softwaremodularisierung – aber wie?           23

      Abhängigkeitsdeklaration

      •       präferierte Abhängigkeitsbeschreibung über Import-Package Header
                – Trennung von Abhängigkeitsdeklaration und package provider
                – Zusätzlich Require-Bundle manifest header
                           • Eigentlich Antipattern

                                  Import-Package:de.oio.service.api     Export-Package: de.oio.service.api de.oio.service
  de.oio.main:

                                  Require-Bundle: de.oio.util

                                                      de.oio.util

© Orientation in Objects GmbH                                          Softwaremodularisierung – aber wie?           24

                                                                                                                            12
OSGi und Reflection

  •       Zugriff per Reflection über Bundlegrenzen ist generell genauso beschränkt wie typisierte Zugriffe
  •       DynamicImport-Package Header erlaubt Zugriff von reflektionbasierten Frameworks aus Bundles auf
          Applikationbundles
             – dabei entstehende Dependency Zyklen lösen ev. in OSGi lifecycle Sideeffect aus
  •       Erweiterung der Bundle Wiring API (Version 4.3) löst diese Problem

                                                                                                                   Bundle: AppModel
                Bundle: Framework                                                                                  package de.oio.entity.api;

                   package
                   org.hibernate.reflect;
                                                    Export-Package: de.oio.entity.api
                                                                                                                       MeineEntity
                                                 DynamicImport-Package
                        EntityScanner                                                                              package de.oio.entity.spi;

                                                                                                                        MeineImpl

© Orientation in Objects GmbH                                                Softwaremodularisierung – aber wie?                                25

      OSGi und Versionierung

      •       Spezifikation einer strengen Syntax uns Semantik
                – version ::=  [ ‘.’  [ ‘.’  [ ‘.’  ]]]

      •       Berücksichtigt unterschiedliche Bedürfnisse von Modul Providern und Consumern
                – Unter Berücksichtigung des Package Dependency Konzepts

      •       Bsp:
                – Export-Package: com.acme.foo; version=1.2.3.201003030903
                – Import-Package: com.acme.foo; version=“[1.2,2.0)”

© Orientation in Objects GmbH                                                Softwaremodularisierung – aber wie?                                26

                                                                                                                                                     13
OSGI – Vorteile

      •       Klare Definition des Modulinterfaces
                – Implementierungsdetails verborgen
      •       Laufzeitaustausch von Modulen
                – dynamische Erweiterbarkeit von Systemen
                – Updates/Bugfixing zur Laufzeit
      •       Support für inkompatible Modulversionen
                – eindeutige Semantik und Deklaration im Modul und bei Dependency
                – parallele multiple Versionen eines Moduls
                – multiple OSGi Runtimes in einer JVM
      •       Ausgereifter Standard
                – Version 7 Stand 2018 verfügbar
                – Verschiedene Implementierungen
                – 20 Jahre Entwicklung(6 Major Releases)

© Orientation in Objects GmbH                                            Softwaremodularisierung – aber wie?   27

      OSGI – Nachteile

      •       (ursprünglich) sehr hohe Lernkurve
                – sowohl für Modulprovider als Modulconsumer
                – historisch verbrauchtes Image
                           • Unglückliche Standardkonkurrenz zu Jigsaw
      •       teilweise eingeschränkte Nutzbarkeit von 3rd party JARs
                – konnte zu Umpaketierung bzw. komplexen Zusatzkonfigurationen führen
                           • 3rd Party Jars als Bundle
                           • im Application Bundle
                – Reflection bzw. Bytecodemanipulation durch 3rd party Libs/Frameworks problematisch
      •       Buildmanagement und IDE Support (war) beschränkt
      •       Fehlersuche ohne tiefes OSGi Knowhow aufwendig
                – speziell Runtimechecks im Classloader
                – Bundle Lifecycle Fehler
                – mögliche Memory Leaks bei Nutzung in http-Sessions
      •       Versionierung mit Ranges kann bei großen Modulsets zu NP-vollständigen Problemen zur Laufzeit
              führen

© Orientation in Objects GmbH                                            Softwaremodularisierung – aber wie?   28

                                                                                                                    14
OSGI – Zielarchitektur

      •       Komplexe Zielsysteme
                – (sehr große) Modulzahl (
OSGI ist toll, aber …

                                             Flugzeug startet

                                        OSGI-Container startet

                                Stabile Version des Autopilot-Moduls
                                      dynamisch bestimmen

© Orientation in Objects GmbH                            Softwaremodularisierung – aber wie?                 31

      Auflösung der passenden Artefakte zur Build-Zeit

                                     1.0

                                               module-demo

                                       moduleA                      moduleB

   rootProject.name = 'module-demo'                                        dependencies {
   include 'moduleA', 'moduleB'                                              implementation project(':moduleA')
                                                                           }

© Orientation in Objects GmbH                            Softwaremodularisierung – aber wie?                 32

                                                                                                                  16
Build-System – Vorteile

      •       Gängige Build-Systeme unterstützen Multi-Module-Builds problemlos

      •       Relativ einfach

      • Qualitätssicherung eines definierten Modul-Sets

© Orientation in Objects GmbH                                Softwaremodularisierung – aber wie?   33

      Build-System – Nachteile

      •       IDE-Support ist brüchig

      • Jede Änderung erfordert
                –      Rebuild
                –      Versionsnummer
                –      QA-Zyklus
                –      Deployment

© Orientation in Objects GmbH                                Softwaremodularisierung – aber wie?   34

                                                                                                        17
Build-System – Zielarchitektur

                                         Java
                                       Frontend

                                         API

                                         Java
                                       Backend

© Orientation in Objects GmbH               Softwaremodularisierung – aber wie?   35

                                         ④

                    Java Platform Module System

© Orientation in Objects GmbH               Softwaremodularisierung – aber wie?   36

                                                                                       18
© Orientation in Objects GmbH   Softwaremodularisierung – aber wie?   37

© Orientation in Objects GmbH   Softwaremodularisierung – aber wie?   38

                                                                           19
© Orientation in Objects GmbH   Softwaremodularisierung – aber wie?   39

© Orientation in Objects GmbH   Softwaremodularisierung – aber wie?   40

                                                                           20
Java 9 Module

      •       Java 9 definiert Module als neue Möglichkeit für die Strukturierung
                – Module können Abhängigkeiten aufeinander definieren
      •       Die Sichtbarkeit auf beinhaltete Interfaces/Klassen kann selektiv erfolgen
                – Kapselung über bisherige Sichtbarkeiten hinaus

                                        Modul: Main                                 Modul: Service

                                            Main                                          MeineAPI

                                                                                         MeineImpl

© Orientation in Objects GmbH                                        Softwaremodularisierung – aber wie?          41

      Exportierte Packages und Abhängigkeiten

      •       Andere Packages sind nur mit expliziter Deklaration einer Abhängigkeit zugreifbar
                – Schlüsselwort „requires“ in Moduldeskriptor

      •       Trennung von Schichten durch Teilung in Module

      •       Zugriff auf Packages nur durch explizite Freigabe mittels „exports“

                                                                                       module java.base {
                                module de.oio.main {
                                    requires java.logging;      implizit                   exports java.lang;
                                                                                           exports java.util;
                                    requires de.oio.util;
                                                                                           [...]
                                }
                                                                                       }
                                                    explizit
                                module java.logging {                                  module de.oio.util {
                                    exports java.util.logging;                             exports de.oio.util;
                                }                                                      }

© Orientation in Objects GmbH                                        Softwaremodularisierung – aber wie?          42

                                                                                                                       21
Transitive Abhängigkeiten

      •       Module haben Standardmäßig keinen Zugriff auf Inhalte von transitiven Abhängigkeiten

                            module de.oio.m1 {        module de.oio.m2 {                                   module de.oio.m3 {
                              requires de.oio.m2;       requires de.oio.m3;                                  exports de.oio.m3;
                            }                         }                                                    }

      •       Durch das Schlüsselwort „transitive“ bei einer „requires“ Deklaration wird Zugriff für abhängige
              Module impliziert

                            module de.oio.test {                      module de.oio.util {
                              requires de.oio.util;                     requires transitive de.oio.api;
                            }                                         }

                                 transitiv    module de.oio.api {                                           direkt
                                                exports de.oio.api;
                                              }

© Orientation in Objects GmbH                                        Softwaremodularisierung – aber wie?                          43

      Module und Reflection

      •       Zugriff per Reflection über Modulgrenzen ist generell eingeschränkt
                – Exportierte Packages gewähren Zugriff auf „public“ Elemente
                                module de.oio.main {                                      module de.oio.util {
                                    requires de.oio.util;                                     exports de.oio.util;
                                }                                                         }

      •       Schlüsselwort „opens“ gewährt Vollzugriff auf Elemente beliebiger Sichtbarkeit
                                module de.oio.main {                                     module de.oio.util {
                                    requires de.oio.util;                                    opens de.oio.util;
                                }                                                        }

      •       „open“/„opens“ impliziert keine Sichtbarkeit auf Sprachebene
                – Freigabe auf Sprachebene und für vollständige Reflection
                                                                                    module de.oio.util {
                                                                                        exports de.oio.util;
                                                                                        opens de.oio.util;
                                                                                    }

© Orientation in Objects GmbH                                        Softwaremodularisierung – aber wie?                          44

                                                                                                                                       22
Eingeschränkte Exporte

      •       „exports“ und „opens“ können auch nur für spezifische Module freigegeben werden

                                module de.oio.util {
                                    exports de.oio.util to de.oio.main;
                                    opens de.oio.util to de.oio.main;
                                }
      •       Spezifisches „exports“ notwendig zum Test von internen Klassen aus dediziertem Testmodul

      •       Spezifisches „opens“ notwendig für Frameworks, welche auf Reflection basieren
                – Spring Framework
                – JPA
                – JAXB

© Orientation in Objects GmbH                                     Softwaremodularisierung – aber wie?    45

      JPMS – Vorteile

      •       Relativ einfache Moduldeklaration
                – direkte Angabe der benötigten Module
      •       einfacher initialer Migrationspfad
                – schrittweise Modularisierung ausgehend vom unnamed Module
      •       Ein abstrakter Datentyp existiert nur einmal
                – JPMS prüft nur die Zugreifbarkeit
                           • Einfachere Fehlersuche
      •       Toolsupport scheint sich schnell zu entwickeln
      •       DI und Reflection konzeptionell bearbeitet

© Orientation in Objects GmbH                                     Softwaremodularisierung – aber wie?    46

                                                                                                              23
JPMS – Nachteile

      •       Alle Module müssen auf den gleichen abstrakten Datentypen aufbauen
      •       keine Applikationsversionierung
                – keine Semantik der Kompatibilität
                           • Version aus JDK
      •       keine Laufzeitaustauschbarkeit von Modulen
      •       Direkte Bindung an ein konkretes Modul statt möglicher Laufzeitevaluation
      •       Bisher wenig reale Praxiserfahrung
                – z.B. DI/Reflection

© Orientation in Objects GmbH                                         Softwaremodularisierung – aber wie?   47

      JPMS – Zielarchitektur

      •       Modularisierung von Plattformen
                – Bereitstellung definierter Subsets eines released Masters
      •       Einheitliches Entwicklungsteam der Plattform
                – keine getrennten Releasezyklen der Module
                – keine freie kombinierbarkeit von unterschiedlichen Releaseständen von Modulen
      •       Benutzer nutzt Plattformen als Sets von Kompatiblen Modulreleases
      •       Templating einer hierarchisierten Architektur
      •       Kapselung von Implementierungsdetails

© Orientation in Objects GmbH                                         Softwaremodularisierung – aber wie?   48

                                                                                                                 24
⑤

                                   Microservices

© Orientation in Objects GmbH                     Softwaremodularisierung – aber wie?   49

                                        Gefühlt wollen alle

                                  Microservices mit
                                REST / JSON Schnittstellen

© Orientation in Objects GmbH                     Softwaremodularisierung – aber wie?   50

                                                                                             25
Ist doch einfach, oder?

                                           Sicherheit?

                                        Logging?

      Synchron / asynchron?

© Orientation in Objects GmbH               Softwaremodularisierung – aber wie?   51

                                Versionierung?
                                Was sagt Roy Fielding?

© Orientation in Objects GmbH               Softwaremodularisierung – aber wie?   52

                                                                                       26
Quelle: https://www.slideshare.net/evolve_conference/201308-fielding-evolve/31
© Orientation in Objects GmbH                            Softwaremodularisierung – aber wie?                                                        53

                                “Websites don’t come with version numbers […]

                                  A RESTful API (done right) is just a website
                                     for clients with a limited vocabulary.”

                                                                                                Quelle: https://www.infoq.com/articles/roy-fielding-on-versioning
© Orientation in Objects GmbH                            Softwaremodularisierung – aber wie?                                                        54

                                                                                                                                                                    27
© Orientation in Objects GmbH                           Softwaremodularisierung – aber wie?   55

                                           Was immer alle vergessen

                                              HATEOAS
                                Hypermedia as the engine of Application state

© Orientation in Objects GmbH                           Softwaremodularisierung – aber wie?   56

                                                                                                   28
© Orientation in Objects GmbH                                        Softwaremodularisierung – aber wie?                                                   57

                                       Niemand nutzt Hypermedia

          “I am getting frustrated by the number of people calling any HTTP-based interface a REST API. Today’s
                            example is the SocialSite REST API. That is RPC. It screams RPC. […]”

           “What needs to be done to make the REST architectural style clear on the notion that hypertext is a
          constraint? In other words, if the engine of application state (and hence the API) is not being driven by
                           hypertext, then it cannot be RESTful and cannot be a REST API. Period.
                             Is there some broken manual somewhere that needs to be fixed?”

                                                       Roy T. Fielding, 2008, https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven#comments

© Orientation in Objects GmbH                                        Softwaremodularisierung – aber wie?                                                   58

                                                                                                                                                                29
Wir brauchen einen „Chef“

                                Single Source of Truth

© Orientation in Objects GmbH                         Softwaremodularisierung – aber wie?   59

                                        Wir brauchen einen „Chef“
                                     Single Source of Truth

© Orientation in Objects GmbH                         Softwaremodularisierung – aber wie?   60

                                                                                                 30
Schnittstellen
                                         Typgeprüftes Schnittstellenformat
                                                    TypeScript / Flow / Eine Sprache
                                                              „Compiler“

© Orientation in Objects GmbH                                         Softwaremodularisierung – aber wie?   61

      ACM Paper „Lessons from building static analysis tools at Google”

      •       „We advocate […] pushing workflow integration as early as possible“

      •       „When possible, checks are enabled as compiler errors“
                – „[…] while [developers] are still amenable to making changes“

© Orientation in Objects GmbH                                         Softwaremodularisierung – aber wie?   62

                                                                                                                 31
Microservices – Vorteile

                                 muss ich das wirklich noch erklären?
                                                  

© Orientation in Objects GmbH                      Softwaremodularisierung – aber wie?   63

      Microservices – Nachteile

                                   „Modularisierung kostet Geld!“

                                Mehr Modularisierung kostet mehr Geld!

© Orientation in Objects GmbH                      Softwaremodularisierung – aber wie?   64

                                                                                              32
Microservices – Zielarchitektur

                                Router Service             Search Service

                                        Product Service

                                       Meta Info Service

© Orientation in Objects GmbH                               Softwaremodularisierung – aber wie?   65

                                                   Fazit

© Orientation in Objects GmbH                               Softwaremodularisierung – aber wie?   66

                                                                                                       33
Fazit

      •       Java bietet etwas, aber für manche Anwendungsfälle zu wenig

      •       OSGI hat viele tolle Features gebracht, ist aber aufwendig und erfordert gutes Tooling

      •       Über einen längeren Zeitraum haben sich viele mit Build-System-Modularisierung beholfen

      •       JPMS löst uns einige der alten Probleme

      •       Microservices bringen viel Nutzen, das allerdings zu hohen Kosten

© Orientation in Objects GmbH                                    Softwaremodularisierung – aber wie?             67

      Fazit

      •       Modularisierung nur bei konkretem Nutzen und nicht zum Selbstzweck

      •       Modularisierung kostet Geld! Nachträglich wird es noch teurer

      •       Modularisierung muss in Zeiten von Microservices trotz aller Agilität Up-Front eingeplant werden

© Orientation in Objects GmbH                                    Softwaremodularisierung – aber wie?             68

                                                                                                                      34
? ??                        ?
                                   Fragen ?
                                                     ?
      ?
        ? ?
Orientation in Objects GmbH

Weinheimer Str. 68
68309 Mannheim

www.oio.de
info@oio.de                                              69

                              Vielen Dank für Ihre
                               Aufmerksamkeit!

Orientation in Objects GmbH

Weinheimer Str. 68
68309 Mannheim

www.oio.de
info@oio.de

                                                              35
Kostentreiber

      1.        APIs
      2.        Unabhängigkeit
      3.        Transitive Abhängigkeiten
      4.        Versionierung
      5.        Build- und Konfiguration-Management
      6.        IDE-Support
      7.        QM-Prozesse

© Orientation in Objects GmbH                                                                           Softwaremodularisierung – aber wie?                                                      71

      Adam Bien als Nostradamus

                                                                        Konkret?
      2019 PREDICTIONS
      Oracle's move to opensource the entire JDK with tooling (even Java Mission Control) opened the market for third party companies like e.g. Amazon, RedHat or Azul Systems to provide
            support. Also innovations like GraalVM keep Java interesting. Java popularity in OpenSource and Tiobe Language index should grow in 2019.
      Serverless / Function as a Service is a fine-grained (Message Driven Bean / Command Pattern - like), interaction model. FaaS is widely overused, which causes complex applications to be
            designed as distributed command pattern architecture. Such applications are hard to build, deploy, debug and profile. It might be too early for a backlash, but I would expect at least
            some conference talks with titles like: "How to survive FaaS".
      Kotlin is the programming language of choice for android development, what also helps with general adoption. Kotlin could become more popular in 2019, except Google manages to
            release Fuchsia and Flutter and does not push Dart.
      There is no logical explanation for building and deploying megabyte-sized WARs/JARs, when only a few kB change in each iteration. ThinWARs gained popularity in 2018, in 2019 they could
            become even more popular. Making microprofile available on stock Java EE 8 application servers, makes the deployment units even smaller (microdeployments), faster and so more
            productive.
      Frequent releases, interesting innovation, conference presence will make microprofile even more popular.
      Jakarta EE is gaining momentum and the project makes significant progress. The availability of jakartablogs.ee, JNoSQL and Eclipse GlassFish 5.1.0 will keep Jakarta EE in the news.
      There is a common perception, that MicroProfile only works on esoteric runtimes. However, most "stock" application servers support Java EE 8 and MicroProfile without any additional setup,
            download or configuration. The popularity of Java EE / Jakarta EE + MicroProfile (fusion) should grow in 2019.
      After private cloud offerings (shipping servers to datacenters) Amazon's Outpost, Google's GKE, Microsoft's Azure Stack, private clouds should become more popular in 2019. I was too
            early with the predictions 10 years ago, but now you can buy private clouds from public cloud vendors.
      Microsoft, Google, Mozilla and others committed to use MDN as the canonical resource to describing WebStandards and Web API. The general availability of WebComponents, Service
            Workers, Grid Layout, Fetch API, WebSockets, and ES 6 modules makes JavaScript frameworks optional. In 2019 I expect more projects moving away from JavaScript frameworks into
            vanilla WebStandards.
      The innovation in Java and frequent train releases, will make other JVM languages like e.g. Scala, Clojure less popular.
      The use of external frameworks will further decrease in enterprise. Netflix stopped developing Hystrix, which will force many enterprise projects to migrate away from massive Hystrix-
            boilerplate code, to either MicroProfile Fault Tolerance or resilience4j. Because the ecosystem is so rich, I expect more projects to collapse. 2019 could become the year of YAGNI.
      Microsoft discontinued Edge and is going to use chromium what is a big move towards WebStandards in enterprise projects and also a reason to refactor exising projects by removing
            optional frameworks.
      kubernetes became the de-facto standard orchestrator. OpenShift is a popular kubernetes distribution, which is already surprisingly well adopted within enterprises. In 2019 OpenShift could
            gain further adoption, also driven by the IBM's acquisition of RedHat.

© Orientation in Objects GmbH                                                                           Softwaremodularisierung – aber wie?                                                      72

                                                                                                                                                                                                      36
Was heißt Kompatibilität?

      •       Compile
                – Gelinkte Schnittstelle
      •       Runtime
                – Geladenes/resolved Module
                – Getestetes Szenario

© Orientation in Objects GmbH                                      Softwaremodularisierung – aber wie?         73

      Richtige Modularisierungsentscheidungen

      •       Die korrekte ‚erste‘ Modularisierungsentscheidung aka Modularisierungstechnikentscheidung
              entbindet nicht von der Verantwortung jeden folgenden Schnitt auf seine Korrektheit und
              problemadäquate Ausführung zu prüfen

      •       Mögliche Fehler in der Ausarbeitung eines Modulzuschnitts
                – zu feingranulare Schnitt
                – starke Kopplung zwischen resultierenden Modulen (Kopplung)
                – Mangelhafte Kapselung von Features in definierten Modulen (Kapselung)

      •       Fehler in der Ausarbeitung können den Nutzen eines Modularisierungsansatzes zerstören bzw. die
              resultierenden Kosten unnötig erhöhen

© Orientation in Objects GmbH                                      Softwaremodularisierung – aber wie?         74

                                                                                                                    37
Exponierte API Probleme

      •       NP! Szenario bei inkompatiblen Versionen             Lösbar?
      •       Ev. incompatibles Szenario diskutieren

© Orientation in Objects GmbH                                       Softwaremodularisierung – aber wie?   75

      Versionierungsprobleme

      •       Range Dependency
                – NP! Beweis
      •       Vollständiges Repo als Lösung
                                                    Praxisprobleme?
                – Polynomial
      •       Repo zur Compilezeit
                – Fertig gelinkt paketieren
                – Alternativ Dependencies vollständig paketieren

© Orientation in Objects GmbH                                       Softwaremodularisierung – aber wie?   76

                                                                                                               38
Sie können auch lesen