Ein Projekt mit mehreren Gradle-Modulen wird als Projekt mit mehreren Modulen bezeichnet. Dieser Leitfaden enthält Best Practices und empfohlene Muster für die Entwicklung von Android-Apps mit mehreren Modulen.
vertraut sind.Das Problem der wachsenden Codebasis
In einer ständig wachsenden Codebasis nehmen Skalierbarkeit, Lesbarkeit und allgemeine Codequalität im Laufe der Zeit oft ab. Dies ist darauf zurückzuführen, dass der Codeumfang zugenommen hat, ohne dass die Verantwortlichen aktive Maßnahmen ergriffen haben, um eine Struktur zu erzwingen, die leicht zu pflegen ist. Die Modularisierung ist eine Möglichkeit, Ihre Codebasis so zu strukturieren, dass die Wartbarkeit verbessert und diese Probleme vermieden werden.
Was ist Modularisierung?
Bei der Modularisierung wird eine Codebasis in lose gekoppelte und in sich geschlossene Teile unterteilt. Jeder Teil ist ein Modul. Jedes Modul ist unabhängig und dient einem bestimmten Zweck. Wenn Sie ein Problem in kleinere und leichter zu lösende Teilprobleme unterteilen, verringern Sie die Komplexität des Entwurfs und der Wartung eines großen Systems.

Vorteile der Modularisierung
Die Vorteile der Modularisierung sind vielfältig, konzentrieren sich aber alle auf die Verbesserung der Wartungsfreundlichkeit und der Gesamtqualität einer Codebasis. In der folgenden Tabelle sind die wichtigsten Vorteile zusammengefasst.
Vorteil | Zusammenfassung |
---|---|
Wiederverwendbarkeit | Die Modularisierung bietet die Möglichkeit, Code gemeinsam zu nutzen und mehrere Apps auf derselben Grundlage zu erstellen. Module sind im Grunde Bausteine. Apps sollten eine Summe ihrer Funktionen sein, wobei die Funktionen als separate Module organisiert sind. Die Funktionen eines bestimmten Moduls sind möglicherweise in einer bestimmten App aktiviert. Ein :feature:news kann beispielsweise Teil der Vollversion und der Wear-App sein, aber nicht Teil der Demoversion. |
Strenge Sichtbarkeitskontrolle | Mit Modulen können Sie ganz einfach steuern, was Sie anderen Teilen Ihrer Codebasis zur Verfügung stellen. Sie können alles außer Ihrer öffentlichen Schnittstelle als internal oder private kennzeichnen, um zu verhindern, dass es außerhalb des Moduls verwendet wird. |
Anpassbare Bereitstellung | Play Feature Delivery nutzt die erweiterten Funktionen von App-Bundles, sodass Sie bestimmte Funktionen Ihrer App unter bestimmten Bedingungen oder bei Bedarf bereitstellen können. |
Die Vorteile der Modularisierung können nur mit einer modularisierten Codebasis erreicht werden. Die folgenden Vorteile lassen sich möglicherweise auch mit anderen Techniken erzielen, aber die Modularisierung kann Ihnen helfen, sie noch besser durchzusetzen.
Vorteil | Zusammenfassung |
---|---|
Skalierbarkeit | In einer eng gekoppelten Codebasis kann eine einzelne Änderung eine Kaskade von Änderungen in scheinbar nicht zusammenhängenden Codeabschnitten auslösen. Ein richtig modularisiertes Projekt folgt dem Prinzip der Trennung von Belangen und begrenzt daher die Kopplung. So erhalten sie mehr Autonomie. |
Inhaberschaft | Module können nicht nur die Autonomie ermöglichen, sondern auch die Rechenschaftspflicht durchsetzen. Ein Modul kann einen dedizierten Inhaber haben, der für die Wartung des Codes, die Behebung von Fehlern, das Hinzufügen von Tests und die Überprüfung von Änderungen verantwortlich ist. |
Kapselung | Bei der Kapselung sollte jeder Teil Ihres Codes so wenig wie möglich über andere Teile wissen. Isolierter Code ist leichter zu lesen und zu verstehen. |
Testbarkeit | Die Testbarkeit gibt an, wie einfach es ist, Ihren Code zu testen. In einer testbaren Codebasis können Komponenten einfach isoliert getestet werden. |
Build-Zeit | Einige Gradle-Funktionen wie inkrementelles Erstellen, Build-Cache oder paralleles Erstellen können die Modularität nutzen, um die Build-Leistung zu verbessern. |
Häufige Probleme
Die Granularität Ihrer Codebasis gibt an, inwieweit sie aus Modulen besteht. Eine detailliertere Codebasis hat mehr, kleinere Module. Beim Entwerfen einer modularisierten Codebasis sollten Sie sich für einen Detaillierungsgrad entscheiden. Berücksichtigen Sie dazu die Größe und die relative Komplexität Ihres Quellcodes. Wenn Sie zu detailliert vorgehen, wird der Overhead zu einer Belastung. Wenn Sie zu grob vorgehen, werden die Vorteile der Modularisierung verringert.
Häufige Fehler:
- Zu detailliert: Jedes Modul verursacht einen gewissen Mehraufwand in Form von erhöhter Build-Komplexität und Boilerplate-Code. Bei einer komplexen Build-Konfiguration ist es schwierig, Konfigurationen in allen Modulen einheitlich zu halten. Zu viel Boilerplate-Code führt zu einer umständlichen Codebasis, die schwer zu pflegen ist. Wenn der Mehraufwand die Verbesserungen der Skalierbarkeit zunichtemacht, sollten Sie in Erwägung ziehen, einige Module zusammenzufassen.
- Zu grobmaschig: Wenn Ihre Module zu groß werden, erhalten Sie möglicherweise einen weiteren Monolithen und verpassen die Vorteile, die die Modularität bietet. In einem kleinen Projekt ist es beispielsweise in Ordnung, die Datenschicht in einem einzigen Modul zu platzieren. Wenn die App jedoch wächst, kann es erforderlich sein, Repositorys und Datenquellen in separate Module aufzuteilen.
- Zu komplex: Es ist nicht immer sinnvoll, Ihr Projekt zu modularisieren. Ein wichtiger Faktor ist die Größe der Codebasis. Wenn Sie nicht davon ausgehen, dass Ihr Projekt über einen bestimmten Schwellenwert hinaus wächst, sind die Vorteile in Bezug auf Skalierbarkeit und Build-Zeit nicht relevant.
Ist die Modularisierung die richtige Technik für mich?
Wenn Sie die Vorteile der Wiederverwendbarkeit, eine strenge Sichtbarkeitskontrolle oder die Play Feature Delivery benötigen, ist die Modularisierung für Sie unerlässlich. Wenn Sie das nicht möchten, aber trotzdem von verbesserter Skalierbarkeit, Inhaberschaft, Kapselung oder Build-Zeiten profitieren möchten, sollten Sie eine Modularisierung in Betracht ziehen.
Produktproben
- Now in Android: Eine voll funktionsfähige Android-App mit Modularisierung.
- Beispiel für eine Architektur mit mehreren Modulen