Modularisierung - was soll das?

632 Aufrufe

Veröffentlicht am

Eine Einführung in das Thema Modularisierung von Software für die Java Virtual Machine (JVM). Behandelt werden die Motivation, ein Modell für den Reifegrad, Strategien zur Modularisierung, ausgewählte Techniken zur Modularisierung, das große Bild und ein Exkurs zum Thema SOLID Entwurfsprinzipien. Abgeschlossen wird das ganze mit Literaturhinweisen.

Veröffentlicht in: Software
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

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

Keine Downloads
Aufrufe
Aufrufe insgesamt
632
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
8
Aktionen
Geteilt
0
Downloads
5
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Modularisierung - was soll das?

  1. 1. Modularisierung - was soll das? http://christian.schlichtherle.de
  2. 2. Modularisierung - was soll das? http://christian.schlichtherle.de Motivation Quellen / Literatur Modularity Maturity Model Strategien zur Modularisierung Exkurs: SOLID Entwurfsprinzipien Techniken zur Modularisierung Das große Bild
  3. 3. Motivation Trennung API und Implementierungen Wiederverwendbarkeit von Komponenten Vereinfachung der Konfiguration Unterschiedliche Entwicklungszyklen von Komponenten Anpassung an verschiedene Laufzeitumgebungen Minimierung von Abhängigkeiten
  4. 4. Wiederverwendbarkeit von Komponenten Idee Ein Modul ist eine natürliche Einheit für wiederverwendbare Softwarekomponenten Module können von anderen Modulen abhängig sein Module bündeln Pakete mit Klassen zu funktionalen Einheiten Vorteile Module haben einen größeren Betrachtungs- gegenstand als Pakete oder gar Klassen Höheres Abstraktionsniveau erreichbar Leichtere Verteilung durch Bündelung in EAR/ JAR/WAR-Dateien
  5. 5. Unterschiedliche Entwicklungszyklen von Komponenten Idee Zerlegung großer Anwendungen in Komponenten mit unabhängigen Entwicklungszyklen Vorteile Verkürzung von Entwicklungszyklen Verteilung kleinerer Programmeinheiten Beispiele
  6. 6. Unterschiedliche Entwicklungszyklen von Komponenten Idee Vorteile Beispiele Apache Maven maven-compiler-plugin 3.3 maven-resources-plugin 2.7 maven-jar-plugin 2.6 maven-surefire-plugin 2.18 maven-core 3.3.1
  7. 7. Trennung API und Implementierungen Idee Schnittstellen und Implementierungen werden in getrennten Modulen untergebracht Vorteile Ein API, viele Implementierungen Getrennte Entwicklungszyklen möglich Beispiele
  8. 8. Trennung API und Implementierungen Idee Vorteile Beispiele TrueUpdate API TrueUpate Installer Core Implementierungen TrueUpdate Installer JSR88 TrueUpdate Installer OpenEJB TrueUpdate Installer Tomcat TrueUpdate Installer Cargo TrueCommons
  9. 9. Trennung API und Implementierungen Idee Vorteile Beispiele TrueUpdate TrueCommons API TrueCommons KeyManager Specification Implementierungen TrueCommons KeyManager Console TrueCommons KeyManager Swing TrueCommons KeyManager Mac OS X
  10. 10. Minimierung von Abhängigkeiten Beispiele Idee Module sollten minimale Abhängigkeiten haben Vorteile Vermeidung von Konflikten Minimierung der Programmgröße
  11. 11. Minimierung von Abhängigkeiten Beispiele TrueLicense TrueLicense JSON TrueLicense Core Implementiert u.a. das V2/XML- Lizenzschlüsselformat Abhängigkeiten (keine bzw. nur JRE) Idee Vorteile
  12. 12. Minimierung von Abhängigkeiten Beispiele TrueLicense TrueLicense JSON Abhängigkeiten Jackson JSON Processor TrueLicense Core Implementiert das V2/JSON- Lizenzschlüsselformat TrueLicense Core Idee Vorteile
  13. 13. Vereinfachung der Konfiguration Idee Jedes Modul implementiert genau ein Feature Module werden als Plugins realisiert Plugins können zur Laufzeit gefunden und geladen werden Features müssen eine definierte Schnittstelle implementieren Vorteile Die Konfiguration des Klassenpfades definiert die Menge an verfügbaren Features Keine weitere Konfiguration notwendig Beispiele
  14. 14. Vereinfachung der Konfiguration Idee Vorteile Beispiele TrueVFS TrueVFS Driver TAR.GZIP TrueVFS Driver ZIP TrueVFS Driver FILE
  15. 15. Anpassung an verschiedene Laufzeitumgebungen Beispiele Idee Eine Komponente und ihre Integration in verschiedene Laufzeitumgebungen sollten in getrennten Modulen implementiert werden Vorteile Die Komponente ist nicht mehr von einer konkreten Laufzeitumgebung abhängig Pro Laufzeitumgebung ein separates Modul Minimierung von Abhängigkeiten
  16. 16. Anpassung an verschiedene Laufzeitumgebungen Beispiele TrueUpdate Basisfunktionalität TrueUpdate Manager Core Integrationsadapter TrueUpdate Manager Servlet TrueUpdate Manager EJB Idee Vorteile
  17. 17. Modularity Maturity Model Module Modularität Loose Kopplung Devolution Dynamisierung Zusammenfassung Ad-Hoc
  18. 18. Ad-Hoc Kennzeichen Keine formale Beachtung von Modularität Sammlung von Klassendateien ohne Struktur Flacher Klassenpfad Verwendung von Bibliotheken in JAR-Dateien Monolithische Anwendung Uber-JAR Nutzen
  19. 19. Ad-Hoc Kennzeichen Nutzen Einfacher Anfang
  20. 20. Module Kennzeichen Formalisierung der Identität von Modulen Metadaten in Artefakten oder Katalogen Module haben eine Versionsnummer Modellierung von Abhängigkeiten basierend auf diesen Identitäten Bau Entwicklung Betrieb Nutzen Beispiele
  21. 21. Module Kennzeichen Nutzen Entkoppelt Module von Artefakten EAR/JAR/WAR Klarere Sicht auf den Modulzusammenbau Schafft ein Bewusstsein für Versionen Ermöglicht Modulkataloge Beispiele
  22. 22. Module Kennzeichen Nutzen Beispiele RPM OSGi Apache Maven <project>        <dependencies>                <dependency>                        <groupId>net.java.trueupdate</groupId>                        <artifactId>trueupdate-­‐installer-­‐core</artifactId>                        <version>0.8.1-­‐SNAPSHOT</version>                </dependency>                <dependency>                        <groupId>org.apache.openejb</groupId>                        <artifactId>arquillian-­‐openejb-­‐embedded-­‐4</artifactId>                        <version>4.7.1</version>                        <scope>test</scope>                </dependency>                <dependency>                        <groupId>org.apache.openejb</groupId>                        <artifactId>openejb-­‐core</artifactId>                        <version>4.7.1</version>                        <scope>provided</scope>                </dependency>        </dependencies>        [...] </project> Apache Ivy
  23. 23. Module Kennzeichen Nutzen Beispiele RPM OSGi Apache Maven Apache Ivy <dependencies>        <dependency  org="net.java.trueupdate"                                name="trueupdate-­‐installer-­‐core"                                rev="0.8.1"/>        <dependency  org="org.apache.openejb"                                  name="arquillian-­‐openejb-­‐embedded-­‐4"                                rev="4.7.1"                                conf="test"/>        <dependency  org="org.apache.openejb"                                name="openejb-­‐core"                                rev="4.7.1"                                conf="provided"/> </dependencies>
  24. 24. Modularität Kennzeichen Deklarierung von Verträgen für Module Fähigkeiten Anforderungen Implementierungsdetails sind privat Zunächst Auflösung von Abhängigkeiten, dann Modulidentität Nutzen Gegenbeispiele
  25. 25. Modularität Kennzeichen Nutzen Feingranulares Erfassen der Auswirkungen von Fehlerkorrekturen Kompatibilitätsbrüchen auf Implementierungen Anwendungen Bewusstsein für Systemstruktur Kunden/Anbieter-Unabhängigkeit Anforderungsbasierte Überprüfung von Abhängigkeiten Gegenbeispiele
  26. 26. Modularität Kennzeichen Nutzen Gegenbeispiele "Junkyard Module" "Messy Module"
  27. 27. Loose Kopplung Kennzeichen Trennung der Schnittstellen von ihren Implementierungen indirekte Nutzung von Implementierungen Keine Factories Kein `new` Servicebasierte Zusammenarbeit von Modulen Semantische Versionierung von Abhängigkeiten Nutzen
  28. 28. Loose Kopplung Kennzeichen Nutzen Unabhängigkeit von Kunden und Anbietern einer Implementierung
  29. 29. Devolution Kennzeichen Delegation des Eigentums von Artefakten an Repositories mit Unterstützung für Modularität Repositories können spezielle Unterstützung anbieten Zusammenarbeit Kommentierung Bewertungen Foren Aufsicht Abnahmen Lebenszyklen Nutzen
  30. 30. Devolution Kennzeichen Nutzen Größeres Bewusstsein für vorhandene Module Geringere Duplikation von Code erhöht Qualität Bessere Zusammenarbeit auf Basis von Modulen Qualitätskontrolle im laufenden Betrieb
  31. 31. Dynamisierung Kennzeichen Dynamischer Lebenszyklus von Modulen Module sind sich des Lebenszyklus bewusst Z.B. gibt es keine globalen Variablen Unterstützung von Moduloperationen zur Laufzeit Hinzufügen Entfernen Ersetzen Nutzen
  32. 32. Dynamisierung Kennzeichen Nutzen Dynamische Aktualisierung von laufenden Systemen zur ... Erweiterung von Fähigkeiten Korrektur von Fehlern Auflösung von Beschränkungen durch Verwendung verschiedener Versionen desselben Moduls
  33. 33. Zusammenfassung Formale Identität, abgekoppelt von Artefakten Keine Modularisierung Formale Verträge für Module, entkoppelt von deren Identität Dienste mit semantischer Versionierung, entkoppelt von ihrer Implementierung Betrieb von Repositories mit Unterstützung für Modularität, Zusammenarbeit und Aufsicht, unabhängig vom Eigentum Unterstützung von Lebenszyklen ohne Beeinträchtigung des laufenden Betriebs
  34. 34. Strategien zur Modularisierung Bis Level 5: Devolution Bis Level 6: Dynamisierung Grundsätzlich iterative Vorgehensweise Keinen Level ignorieren Keinen Level überspringen Stufenweise Erhöhung des Levels
  35. 35. Bis Level 5: Devolution Arzneimittel Apache Ant / Ivy Gradle SBT Apache Maven Anwendungsgebiete Kleine Projekte Große Unternehmensanwendungen Statische Modularisierung Gegenanzeigen IOC-Container Servlet EJB
  36. 36. Bis Level 6: Dynamisierung Dynamische Modularisierung Anwendungsgebiete IOC-Container Servlet EJB Große Unternehmensanwendungen Arzneimittel OSGi Eclipse Equinox Apache Felix Gegenanzeigen Kleine Projekte
  37. 37. Techniken zur Modularisierung Auflösung von Konflikten Anwendung von Modularisierungsmustern Erstellung eines Plugins
  38. 38. Erstellung eines Plugins Tools TrueCommons Services Konzept Erleichtert die Implementierung von Plugins Beispiele TrueCommons Annotations Erleichtern den Umgang mit java.util.ServiceLoader Beispiele Apache Maven Das grundsätzliche Werkzeug für die Modularisierung
  39. 39. TrueCommons Annotations Erleichtern den Umgang mit java.util.ServiceLoader Generieren Resource-Dateien in META-INF/ services Beispiele Implementierung fremder Schnittstellen Implementierung eigener Schnittstellen
  40. 40. TrueCommons Annotations Erleichtern den Umgang mit java.util.ServiceLoader Beispiele Implementierung fremder Schnittstellen package  com.company.project; import  java.nio.charset.spi.CharsetProvider; import  net.java.truecommons.services.annotations.ServiceImplementation; @ServiceImplementation(CharsetProvider.class) public  class  Ibm437CharsetProvider  extends  CharsetProvider  {        ... } Implementierung eigener Schnittstellen package  com.company.project.impl; import  com.company.project.spec.UltimateServiceSpecification; import  net.java.truecommons.services.annotations.ServiceImplementation; @ServiceImplementation public  class  UltimateServiceImplementation implements  UltimateServiceSpecification  {        ... } package  com.company.project.spec; import  net.java.truecommons.services.annotations.ServiceSpecification; @ServiceSpecification public  interface  UltimateServiceSpecification  {        ... }
  41. 41. TrueCommons Services Konzept Erleichtert die Implementierung von Plugins Beispiele
  42. 42. Beispiele TrueVFS Kernel Specification FsDriverMapFactory.java FsDriverMapModifier.java FsDriverMapLocator.java TrueVFS Driver TAR.GZIP TarGZipDriverMapModifier.java TrueVFS Driver ZIP ZipDriverMapModifier.java Der wahlfreie Zugriff auf Archivdateien soll nur durch Konfiguration des Klassenpfades ermöglicht werden Implementierung des Service-Locator- Entwurfsmusters
  43. 43. TrueVFS Kernel Specification FsDriverMapFactory.java package  net.java.truevfs.kernel.spec.spi; import  net.java.truecommons.annotations.ServiceImplementation; import  net.java.truecommons.annotations.ServiceSpecification; import  net.java.truecommons.services.LocatableFactory; import  net.java.truevfs.kernel.spec.FsDriver; import  net.java.truevfs.kernel.spec.FsScheme; import  java.util.LinkedHashMap; import  java.util.Map; @ServiceSpecification @ServiceImplementation public  class  FsDriverMapFactory extends  LocatableFactory<Map<FsScheme,  FsDriver>>  {        @Override        public  Map<FsScheme,  FsDriver>  get()  {  return  new  LinkedHashMap<>(32);  } } FsDriverMapModifier.java FsDriverMapLocator.java
  44. 44. TrueVFS Kernel Specification FsDriverMapFactory.java FsDriverMapModifier.java package  net.java.truevfs.kernel.spec.spi; import  net.java.truecommons.annotations.ServiceSpecification; import  net.java.truecommons.services.LocatableModifier; import  net.java.truevfs.kernel.spec.FsDriver; import  net.java.truevfs.kernel.spec.FsScheme; import  java.util.Map; @ServiceSpecification public  abstract  class  FsDriverMapModifier extends  LocatableModifier<Map<FsScheme,  FsDriver>>  {  } FsDriverMapLocator.java
  45. 45. TrueVFS Kernel Specification FsDriverMapFactory.java FsDriverMapModifier.java FsDriverMapLocator.java package  net.java.truevfs.kernel.spec.sl; import  net.java.truecommons.services.Container; import  net.java.truecommons.services.ServiceLocator; import  net.java.truevfs.kernel.spec.FsDriver; import  net.java.truevfs.kernel.spec.FsScheme; import  net.java.truevfs.kernel.spec.spi.FsDriverMapFactory; import  net.java.truevfs.kernel.spec.spi.FsDriverMapModifier; import  java.util.Collections; import  java.util.Map; public  final  class  FsDriverMapLocator implements  Container<Map<FsScheme,  FsDriver>>  {        public  static  final  FsDriverMapLocator  SINGLETON  =  new  FsDriverMapLocator();        private  final  Map<FsScheme,  FsDriver>  drivers                        =  Collections.unmodifiableMap(                        new  ServiceLocator(FsDriverMapLocator.class)                                        .factory(FsDriverMapFactory.class,  FsDriverMapModifier.class)                                        .get());        private  FsDriverMapLocator()  {  }        @Override        public  Map<FsScheme,  FsDriver>  get()  {  return  drivers;  } }
  46. 46. TrueVFS Driver TAR.GZIP TarGZipDriverMapModifier.java package  net.java.truevfs.driver.tar.gzip; import  net.java.truecommons.annotations.ServiceImplementation; import  net.java.truecommons.shed.ExtensionSet; import  net.java.truevfs.kernel.spec.FsDriver; import  net.java.truevfs.kernel.spec.FsScheme; import  net.java.truevfs.kernel.spec.spi.FsDriverMapModifier; import  java.util.Map; @ServiceImplementation public  final  class  TarGZipDriverMapModifier  extends  FsDriverMapModifier  {        @Override        public  Map<FsScheme,  FsDriver>  apply(final  Map<FsScheme,  FsDriver>  map)  {                final  FsDriver  driver  =  new  TarGZipDriver();                for  (final  String  extension  :  new  ExtensionSet("tar.gz|tar.gzip|tgz"))                        map.put(FsScheme.create(extension),  driver);                return  map;        } }
  47. 47. TrueVFS Driver ZIP ZipDriverMapModifier.java package  net.java.truevfs.driver.zip; import  net.java.truecommons.annotations.ServiceImplementation; import  net.java.truevfs.comp.zipdriver.ZipDriver; import  net.java.truevfs.kernel.spec.FsDriver; import  net.java.truevfs.kernel.spec.FsScheme; import  net.java.truevfs.kernel.spec.spi.FsDriverMapModifier; import  java.util.Map; @ServiceImplementation public  final  class  ZipDriverMapModifier  extends  FsDriverMapModifier  {        @Override        public  Map<FsScheme,  FsDriver>  apply(final  Map<FsScheme,  FsDriver>  map)  {                map.put(FsScheme.create("zip"),  new  ZipDriver());                return  map;        } }
  48. 48. Anwendung von Modularisierungsmustern Abhängigkeitsmuster Azyklische Abhängigkeiten
  49. 49. Azyklische Abhängigkeiten Analysetools Module dürfen keine zyklischen Abhängigkeiten haben Das gleiche gilt eigentlich auch für Pakete Ausgangssituation Lösungsverfahren
  50. 50. Azyklische Abhängigkeiten Analysetools JDepend JDepend Maven Plugin Apache Maven Beispiel TrueLicense Maven Plugin TrueLicense Maven Plugin Module dürfen keine zyklischen Abhängigkeiten haben Ausgangssituation Lösungsverfahren
  51. 51. Azyklische Abhängigkeiten Analysetools Module dürfen keine zyklischen Abhängigkeiten haben Ausgangssituation Zyklische Abhängigkeit zwischen Klassen und Modulen (Quelle: [JAA]) Lösungsverfahren
  52. 52. Azyklische Abhängigkeiten Analysetools Module dürfen keine zyklischen Abhängigkeiten haben Ausgangssituation Lösungsverfahren Eskalation Auflösung durch Eskalation (Quelle: [JAA]) De-Eskalation Rückrufschnittstelle
  53. 53. Azyklische Abhängigkeiten Analysetools Module dürfen keine zyklischen Abhängigkeiten haben Ausgangssituation Lösungsverfahren Eskalation De-Eskalation Auflösung durch De-Eskalation (Quelle: [JAA]) Rückrufschnittstelle
  54. 54. Azyklische Abhängigkeiten Analysetools Module dürfen keine zyklischen Abhängigkeiten haben Ausgangssituation Lösungsverfahren Eskalation De-Eskalation Rückrufschnittstelle Auflösung durch Rückrufschnittstelle (Quelle: [JAA])
  55. 55. Auflösung von Konflikten Ausgangssituation Ein Abhängigkeitsgraph kann Versionskonflikte enthalten Lösungsverfahren Statische Modularisierung Dynamische Modularisierung
  56. 56. Ausgangssituation Ein Abhängigkeitsgraph kann Versionskonflikte enthalten
  57. 57. Lösungsverfahren Statische Modularisierung <project>        <dependencyManagement>                <dependencies>                        <dependency>                                <groupId>commons-­‐collections</groupId>                                <artifactId>commons-­‐collections</artifactId>                                <version>3.2.1</version>                        </dependency>                        […]                </dependencies>        </dependencyManagement>        […] </project> Dynamische Modularisierung
  58. 58. Lösungsverfahren Statische Modularisierung Dynamische Modularisierung
  59. 59. Das große Bild Quelle: [JAA]
  60. 60. Exkurs: SOLID Entwurfsprinzipien Single responsibility principle Open/closed principle Liskov substitution principle Interface segregation principle Dependency inversion principle
  61. 61. Quellen / Literatur [JAA] [SMB] [CC] [LC]
  62. 62. /Modularisierung - was soll das.../Modularity Maturity Model Vorgestellt von Graham Charters (IBM) auf dem OSGi Community Event 2011. http://de.slideshare.net/mfrancis/ibm-sponsorship-keynote-towards-a-modularity-maturity-model-graham- charters /Modularisierung - was soll das.../Exkurs: SOLID Entwurfsprinzipi... Ausführlich erklärt in Anhang A von Kirk Knoernschilds Buch. http://en.wikipedia.org/wiki/SOLID_(object-oriented_design) /Modularisierung - was soll das.../Motivation/Unterschiedliche Entwicklungsz.../Beispiele/Apache Maven „Apache Maven is a software project management and comprehension tool.“ https://maven.apache.org /Modularisierung - was soll das.../Motivation/Unterschiedliche Entwicklungsz.../Beispiele/Apache Maven/maven-resources-plugin https://maven.apache.org/plugins/maven-resources-plugin/ /Modularisierung - was soll das.../Motivation/Unterschiedliche Entwicklungsz.../Beispiele/Apache Maven/maven-compiler-plugin https://maven.apache.org/plugins/maven-compiler-plugin/ /Modularisierung - was soll das.../Motivation/Unterschiedliche Entwicklungsz.../Beispiele/Apache Maven/maven-surefire-plugin http://maven.apache.org/surefire/maven-surefire-plugin/ /Modularisierung - was soll das.../Motivation/Unterschiedliche Entwicklungsz.../Beispiele/Apache Maven/maven-jar-plugin https://maven.apache.org/plugins/maven-jar-plugin/ /Modularisierung - was soll das.../Motivation/Trennung API und Implementieru.../Beispiele/ TrueUpdate Ein Framework zur (halb-)automatischen Aktualisierung von installierten Enterprise- Java-Anwendungen. https://trueupdate.java.net /Modularisierung - was soll das.../Motivation/Trennung API und Implementieru.../Beispiele/ TrueCommons Eine Sammlung wiederverwendbarer Softwarekomponenten, analog zu den Apache Commons. https://truecommons.java.net /Modularisierung - was soll das.../Motivation/Minimierung von Abhängigkeiten/Beispiele/ TrueLicense/TrueLicense JSON/Abhängigkeiten/Jackson JSON Processor Benötigt ca. 1,5 MB Speicherplatz für die JAR-Dateien.
  63. 63. /Modularisierung - was soll das.../Motivation/Vereinfachung der Konfiguratio.../Beispiele/TrueVFS TrueVFS ist ein virtuelles Dateisystem für Archivdateien (ZIP, TAR, etc). https://truevfs.java.net /Modularisierung - was soll das.../Motivation/Vereinfachung der Konfiguratio.../Beispiele/TrueVFS/ TrueVFS Driver FILE Ermöglicht den wahlfreien Zugriff auf das Plattformdateisystem. https://truevfs.java.net/truevfs-driver/truevfs-driver-file/index.html /Modularisierung - was soll das.../Motivation/Vereinfachung der Konfiguratio.../Beispiele/TrueVFS/ TrueVFS Driver TAR.GZIP Ermöglicht den wahlfreien Zugriff auf TAR.GZIP-Dateien. https://truevfs.java.net/truevfs-driver/truevfs-driver-tar-gzip/index.html /Modularisierung - was soll das.../Motivation/Vereinfachung der Konfiguratio.../Beispiele/TrueVFS/ TrueVFS Driver ZIP Ermöglicht den wahlfreien Zugriff auf ZIP-Dateien. https://truevfs.java.net/truevfs-driver/truevfs-driver-zip/index.html /Modularisierung - was soll das.../Motivation/Anpassung an verschiedene Lauf.../Beispiele/ TrueUpdate Ein Framework zur (halb-)automatischen Aktualisierung von installierten Enterprise- Java-Anwendungen. https://trueupdate.java.net /Modularisierung - was soll das.../Motivation/Anpassung an verschiedene Lauf.../Beispiele/ TrueUpdate/Basisfunktionalität/TrueUpdate Manager Core Kommuniziert mit einer Zielanwendung in demselben Container und einem Repository auf einem separaten Server und führt ggf. Updates der Zielanwendung durch. /Modularisierung - was soll das.../Motivation/Anpassung an verschiedene Lauf.../Beispiele/ TrueUpdate/Integrationsadapter/TrueUpdate Manager EJB Integriert den TrueUpdate Manager in einen EJB-Container. /Modularisierung - was soll das.../Motivation/Anpassung an verschiedene Lauf.../Beispiele/ TrueUpdate/Integrationsadapter/TrueUpdate Manager Servlet Integriert den TrueUpdate Manager in einen Servlet-Container. /Modularisierung - was soll das.../Modularity Maturity Model/Module/Beispiele/Apache Maven „Apache Maven is a software project management and comprehension tool.“ https://maven.apache.org
  64. 64. /Modularisierung - was soll das.../Modularity Maturity Model/Module/Beispiele/Apache Ivy "Apache Ivy™ is a popular dependency manager focusing on flexibility and simplicity.“ http://ant.apache.org/ivy/ /Modularisierung - was soll das.../Modularity Maturity Model/Module/Beispiele/RPM "The RPM Package Manager (RPM) is a powerful command line driven package management system capable of installing, uninstalling, verifying, querying, and updating computer software packages." http://www.rpm.org /Modularisierung - was soll das.../Modularity Maturity Model/Module/Beispiele/OSGi "OSGi™ - The Dynamic Module System for Java™." http://www.osgi.org/Main/HomePage /Modularisierung - was soll das.../Modularity Maturity Model/Modularität/Gegenbeispiele/"Junkyard Module" http://www.ruhrnachrichten.de/storage/pic/mdhl/artikelbilder/lokales/rn/bolo/bochum/3871428_1_0514bo- Schrottplatz_dam5.jpg?version=1387194298 /Modularisierung - was soll das.../Modularity Maturity Model/Modularität/Gegenbeispiele/"Messy Module" http://de.wikipedia.org/wiki/Messie-Syndrom /Modularisierung - was soll das.../Modularity Maturity Model/Loose Kopplung/Kennzeichen/ Semantische Versionierung von ... http://semver.org /Modularisierung - was soll das.../Modularity Maturity Model/Dynamisierung/Kennzeichen/ Dynamischer Lebenszyklus von M... OSGi: BundleActivator-Schnittstelle: https://osgi.org/javadoc/r4v43/core/org/osgi/ framework/BundleActivator.html . /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 5: Devolution/ Arzneimittel/Apache Maven „Apache Maven is a software project management and comprehension tool.“ https://maven.apache.org /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 5: Devolution/ Arzneimittel/Apache Ant / Ivy "Apache Ivy™ is a popular dependency manager focusing on flexibility and simplicity.“ http://ant.apache.org/ivy/
  65. 65. /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 5: Devolution/ Arzneimittel/Gradle From command line to IDE to continuous integration, only one Enterprise build automation system to rule them all. https://gradle.org /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 5: Devolution/ Arzneimittel/SBT sbt is a build tool for Scala, Java, and more. http://www.scala-sbt.org/index.html /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 5: Devolution/ Anwendungsgebiete Gemäß Arzneimittelgesetz Paragraph 11: Packungsbeilage. /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 5: Devolution/ Gegenanzeigen Gemäß Arzneimittelgesetz Paragraph 11: Packungsbeilage. /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 6: Dynamisierung/ Arzneimittel/OSGi Open Services Gateway initiative http://www.osgi.org/Main/HomePage /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 6: Dynamisierung/ Arzneimittel/OSGi/Eclipse Equinox https://eclipse.org/equinox/ /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 6: Dynamisierung/ Arzneimittel/OSGi/Apache Felix http://felix.apache.org /Modularisierung - was soll das.../Strategien zur Modularisierung/Bis Level 6: Dynamisierung/ Anwendungsgebiete Gemäß Arzneimittelgesetz Paragraph 11: Packungsbeilage. /Modularisierung - was soll das.../Techniken zur Modularisierung/Erstellung eines Plugins/Tools/ Apache Maven „Apache Maven is a software project management and comprehension tool.“ https://maven.apache.org /Modularisierung - was soll das.../Techniken zur Modularisierung/Erstellung eines Plugins/Tools/ TrueCommons Annotations https://truecommons.java.net/apidocs/net/java/truecommons/annotations/package-summary.html
  66. 66. /Modularisierung - was soll das.../Techniken zur Modularisierung/Erstellung eines Plugins/Tools/ TrueCommons Services https://truecommons.java.net/apidocs/net/java/truecommons/services/package-summary.html /Modularisierung - was soll das.../Techniken zur Modularisierung/Anwendung von Modularisierungs.../Abhängigkeitsmuster/Azyklische Abhängigkeiten/Analysetools/Apache Maven „Apache Maven is a software project management and comprehension tool.“ https://maven.apache.org /Modularisierung - was soll das.../Techniken zur Modularisierung/Anwendung von Modularisierungs.../Abhängigkeitsmuster/Azyklische Abhängigkeiten/Analysetools/JDepend http://clarkware.com/software/JDepend.html /Modularisierung - was soll das.../Techniken zur Modularisierung/Anwendung von Modularisierungs.../Abhängigkeitsmuster/Azyklische Abhängigkeiten/Analysetools/JDepend Maven Plugin http://mojo.codehaus.org/jdepend-maven-plugin/ /Modularisierung - was soll das.../Techniken zur Modularisierung/Anwendung von Modularisierungs.../Abhängigkeitsmuster/Azyklische Abhängigkeiten/Analysetools/Beispiel/ TrueLicense Maven Plugin https://truelicense.java.net/truelicense-maven-plugin/dependencies.html /Modularisierung - was soll das.../Techniken zur Modularisierung/Anwendung von Modularisierungs.../Abhängigkeitsmuster/Azyklische Abhängigkeiten/Analysetools/Beispiel/ TrueLicense Maven Plugin https://truelicense.java.net/truelicense-maven-plugin/jdepend-report.html /Modularisierung - was soll das.../Das große Bild/Quelle: [JAA] Quelle: [JAA]: Figure 6.4: Granularity and architecture all the way down /Modularisierung - was soll das.../Exkurs: SOLID Entwurfsprinzipi.../Single responsibility principl... http://en.wikipedia.org/wiki/Single_responsibility_principle /Modularisierung - was soll das.../Exkurs: SOLID Entwurfsprinzipi.../Open/closed principle http://en.wikipedia.org/wiki/Open/closed_principle /Modularisierung - was soll das.../Exkurs: SOLID Entwurfsprinzipi.../Liskov substitution principle http://en.wikipedia.org/wiki/Liskov_substitution_principle /Modularisierung - was soll das.../Exkurs: SOLID Entwurfsprinzipi.../Interface segregation principl... http://en.wikipedia.org/wiki/Interface_segregation_principle
  67. 67. /Modularisierung - was soll das.../Exkurs: SOLID Entwurfsprinzipi.../Dependency inversion principle http://en.wikipedia.org/wiki/Dependency_inversion_principle /Modularisierung - was soll das.../Quellen / Literatur/[SMB] Ulf Fildebrandt: Software modular bauen: Architektur von langlebigen Softwaresystemen - Grundlagen und Anwendung mit OSGi und Java (dpunkt.verlag) http://www.amazon.de/Software-modular-bauen-Architektur-Softwaresystemen-ebook/dp/B00AIBE0YI /Modularisierung - was soll das.../Quellen / Literatur/[JAA] Kirk Knoernschild: Java Application Architecture: Modularity Patterns with Examples Using OSGI (Prentice Hall) http://www.amazon.de/Java-Application-Architecture-Modularity-Patterns-ebook/dp/B007KOGS5U /Modularisierung - was soll das.../Quellen / Literatur/[LC] http://www.amazon.de/Working-Effectively-Legacy-Robert-Martin-ebook/dp/B005OYHF0A /Modularisierung - was soll das.../Quellen / Literatur/[CC] Robert C. Martin: Clean Code: A Handbook of Agile Software Craftsmanship (Prentice Hall) http://ecx.images-amazon.com/images/I/51d1qVhmAmL.jpg

×