-
Arten von Modulen: Definition und Eigenschaften verschiedener Bausteine, wie Microservices, Self-contained Systems und Deployment-Monolithen.
-
Lebenszyklus von Modulen: Beschreibung, wie ein Baustein erstellt, integriert, getestet, deployt und skaliert wird.
-
Isolationsebenen: Unterschiede zwischen modularer Isolation im Code, in der Laufzeitumgebung und bei Netzwerkschnittstellen.
-
Technische Modularisierung: Bewertung von Konzepten wie Dateien, Bibliotheken, Prozesse, Microservices oder Self-contained Systems.
-
Integration und Kopplung: Analyse von Kopplungsebenen (Sourcecode, Kompilate, Netzwerkprotokoll) und deren Auswirkungen.
-
Qualitätsanforderungen berücksichtigen: Auswahl von Modularisierungskonzepten anhand von Anforderungen wie "Parallelisierbarkeit der Entwicklung" oder "unabhängiges Deployment von Modulen".
-
Strategien und Konsequenzen: Bewertung der Auswirkungen verschiedener Modularisierungsansätze, z. B. Monolith vs. verteilte Module.
-
Technologieabhängigkeit: Wie Modularisierungstechnologien (z. B. Container oder Laufzeitumgebungen) Strategien beeinflussen.
-
Aufwands-Nutzen-Abgleich: Abwägung organisatorischer und technischer Aufwände gegen die erwarteten Vorteile.
-
Integration vs. Dezentralisierung: Identifikation von organisatorischen und technischen Aufwänden für die Integration modularer Systeme.
-
Erwartete Vorteile: Bewertung des Nutzens, wie etwa unabhängiges Deployment, Parallelisierung der Arbeit, Austauschbarkeit von Technologien und verbesserte Verständlichkeit durch klar benannte Module und Integrationspunkte.
-
Modulgrenzen und Komplexität: Analyse, wie die Wahl der Modulgrenzen die Komplexität, den Abstimmungsaufwand bei Änderungen sowie die Entwicklungs- und Wartungskosten beeinflusst.
-
Architects understand that flexibility in the context of this curriculum means the ability to adapt the system to changing requirements.
-
Architects understand the role of information hiding to achieve flexibility, specifically the hiding of decisions that are difficult to make or may change later.
-
Architects can use modularization to map conceptual building blocks to (technical) modules.
-
Architects know the impact on modularization of requirements such as independent deployment, parallelization of work, and replaceability of technologies.
-
Architects understand that the goal of modularization is to reduce coupling between modules.
-
Architects understand possible causes of tight coupling between modules, such as misplaced module boundaries, ill-designed APIs, and over-constrained communication between modules.
-
Architects understand the special role of mutable state in tight coupling.
-
Architects can design a modularization in a bottom-up fashion that will keep coupling low.
-
Architects can decrease coupling by increasing cohesion within modules.
-
Architects can analyze how module boundary choices affect complexity, coordination effort for changes, and development and maintenance costs.
-
Architects understand the role of Conway’s law in constraining modularization.
-
Architects understand the possibility of changing the organization to match the modularization (Inverse-Conway-Maneuver).
-
Architects understand the need to decompose a system into coarse-grained building blocks before modules exist, and can draft a such a decomposition for a system top-down according to known requirements.
-
Architects can apply Context Mapping to design such a decomposition.
-
Architects know alternatives to Context Mapping for coarse-grain system decomposition.
-
Architects can identify organizational and technical costs for integrating a modular system.
-
Architects understand the different communication challenges in organizations that organize teams by bounded contexts and those that organize them by technical competency.
-
Architects understand programming-language mechanisms that relate to modularization such as classes and interfaces in object-oriented languages, namespace mechanisms, and ML-style module languages.
-
Architects understand the role of opaque interfaces in enforcing loose coupling.
-
Architects know interface languages and their differences such as Java/C# interfaces, Java modules, and ML-style module signatures, and can leverage them to enforce loose coupling.
-
Architects know non-linguistic (not built into the programming language) approaches to enforcing modularization such as creating unit tests and using external tools that operate on the module dependency graph.
-
Architects understand the relationship between module mechanisms and deployment strategies.
-
Architects understand that architecture documentation and implementation modularization should be aligned.
-
Architects can document the principles and rules of the modularization strategy.
-
Architects know that architecture documentation can be generated from appropriate modularization mechanisms.