Jenseits der Schichten – Erkundung verschiedener Ansätze für die Android-Projektarchitektur

Einführung in die sich entwickelnde Android-Projektarchitektur

Letzte Woche hatten mein Kollege Wolfram Rittmeyer und ich auf der droidcon Italien-Konferenz das Vergnügen, gemeinsam einen Vortrag mit dem Titel „Beyond Layer – Exploring Different Approaches to Android Project Architecture. zu halten, in dem wir die Entwicklung der Android-Projektarchitektur im Laufe der Jahre erläuterten und uns dabei auf die Herausforderungen und Veränderungen konzentrierten, denen wir auf unserer Reise begegnet sind.

Ein Blick in die Vergangenheit

Ich erinnere mich noch lebhaft an meine erste Begegnung mit dem Legacy-Code der App „Polovni Automobili“, die in einer einzigen Activity-Klasse sage und schreibe 24.000 Zeilen Code enthielt. Die App aus dem Jahr 2011 war ein Zeugnis aus einer Zeit, in der die Android-Projektarchitektur noch in den Kinderschuhen steckte und das Verständnis dafür noch sehr begrenzt war. Überraschenderweise spiegelte sogar die offizielle Dokumentation von Google diese frühe Unklarheit wider, wobei bestimmte Codes architekturunabhängig blieben, was vor allem im YouTube-SDK und im Google Pay-SDK zu beobachten war.

Der Einfluss der Gemeinschaft und die Empfehlungen von Google

Unsere Diskussion befasste sich mit der Rolle der Community, in der sich Versuche, die MVC-Architektur zu implementieren, als erfolglos erwiesen, was schließlich zur Annahme des MVP-Musters führte, das bis 2017 als erfolgreicher Ansatz diente. In diesem Jahr stellte Google seine empfohlene Architektur vor, die LiveData, das Repository-Muster und ViewModel umfasst. Dies war zwar zweifellos ein bedeutender Schritt nach vorn, doch wurden dabei die bestehenden Lösungen und Implementierungen der Community scheinbar außer Acht gelassen, sodass viele Entwickler sich in einer komplexen Landschaft unterschiedlicher Methoden zurechtfinden mussten.

Diagramm zur Darstellung der Entwicklung der Android-Architektur

Eine fortlaufende Entwicklung

Im Jahr 2021 entwickelte sich die Android-Architektur weiter, als Google das Konzept einer 3-Schichten-Architektur einführte und die Bedeutung von unterschiedlichen UI-, Daten- und Domänenschichten betonte. Diese Anpassung bedeutete eine wichtige Anerkennung der Beiträge der Community und der Notwendigkeit, die Entwicklungsprozesse für zukünftige Android-Projekte zu rationalisieren.

In unserer Präsentation gingen wir auf die Feinheiten dieser Veränderungen ein und zeigten die Herausforderungen und Chancen auf, die unseren Weg zur Entwicklung einer robusten und nachhaltigen Android-Projektarchitektur bestimmten.

Unterschiedliche Sichtweisen zu den Google-Richtlinien

Während unserer Erkundung der von Google empfohlenen Architektur haben Wolfram und ich unterschiedliche Interpretationen in Erwägung gezogen. Aus meiner Sicht bedeutet ein Feature innerhalb eines Android-Projekts eine Einheit, die sich direkt in einen Nutzwert für den Anwender übersetzt. Folglich plädiere ich für die Isolierung der UI-Schicht, da sie den für den Benutzer am unmittelbarsten sichtbaren Aspekt darstellt. In der Zwischenzeit sind die Daten- und Domänenschichten gemeinsame Komponenten, die für mehrere Funktionen zugänglich sind, die aus der UI-Schicht stammen.

Gegensätzliche Interpretationen der Funktionskapselung in der Android-Architektur von Wolfram

Im Gegensatz dazu betrachtet Wolfram ein Feature als eine unabhängige Einheit innerhalb des Projekts, die alle wesentlichen Komponenten kapselt: UI-, Daten- und Domänenschichten. Seiner Ansicht nach sollte jedes Feature alle für seine Funktionalität erforderlichen Schichten kapseln. In Szenarien, in denen eine gemeinsame Nutzung von Features erforderlich ist, schlägt Wolfram die Verwendung von Feature-APIs vor, einem Mechanismus, der die nahtlose Kommunikation und den Datenaustausch zwischen verschiedenen Feature-Einheiten erleichtern soll.

Grafische Darstellung der funktionsbasierten Architektur in der Android-Entwicklung

Unsere unterschiedlichen Perspektiven veranlassten uns, die nuancierten Auswirkungen dieser Interpretationen zu vertiefen. Wir haben über die Auswirkungen auf die Skalierbarkeit von Projekten, das Potenzial für die Wiederverwendbarkeit von Code und die allgemeine Wartbarkeit von Android-Anwendungen nachgedacht, die unter diesen gegensätzlichen Paradigmen entwickelt wurden.

In den folgenden Abschnitten werden wir uns mit den spezifischen Anwendungsfällen und Szenarien befassen, die die Stärken und Grenzen der beiden Ansätze aufzeigen. Unser Ziel ist es, eine umfassende Analyse zu liefern, die es Entwicklern ermöglicht, fundierte Entscheidungen bei der Gestaltung und Implementierung von Android-Projektarchitekturen zu treffen.

Die vielfältige Wahrheit der richtigen Architektur

In der dynamischen Welt der Android-Projektarchitektur wird deutlich, dass es keine Einheitslösung gibt. Der optimale Ansatz hängt oft von einer Vielzahl kontextbezogener Faktoren ab, von denen jeder seinen Einfluss auf den Entwicklungsprozess ausübt. Ein solcher entscheidender Faktor ist die Größe und Dynamik des Entwicklungsteams.

Stellen Sie sich ein Szenario vor, in dem mehrere Entwickler gleichzeitig an verschiedenen Funktionsimplementierungen innerhalb eines Projekts arbeiten. In diesem Zusammenhang besteht die Gefahr von redundantem Code, wenn verschiedene Teammitglieder versehentlich ähnliche Probleme angehen, ohne sich der bestehenden Lösungen innerhalb des Projekts bewusst zu sein. Eine solche Redundanz behindert nicht nur den Fortschritt, sondern auch die Effizienz und Wartbarkeit der Codebasis.

In Umgebungen, die durch kleinere Teams gekennzeichnet sind, befürworten wir daher die Übernahme meiner Architekturperspektive. Durch die Trennung der Benutzeroberflächenschicht und die Zentralisierung der Daten- und Domänenschicht sinkt die Wahrscheinlichkeit, bereits vorhandene Lösungen zu übersehen. Dieser gestraffte Ansatz ermöglicht einen zielgerichteteren und effizienteren Arbeitsablauf, wodurch die Gefahr der Code-Duplizierung minimiert und die Gesamtproduktivität des Teams gesteigert wird.

Umgekehrt kann in Projekten mit einem größeren Team mit unterschiedlichen Zuständigkeiten die umfassende Kapselung von Features im Rahmen des Wolfram-Ansatzes eine bessere Zusammenarbeit fördern und eine autonomere Feature-Entwicklung ermöglichen. Durch die Verwendung von Feature-APIs können die Teammitglieder ihre Funktionalitäten nahtlos integrieren, ohne in die Domänen der anderen einzugreifen, was einen kohärenteren und systematischeren Entwicklungsprozess fördert.

Navigieren durch Vertragslaufzeiten und architektonische Entscheidungen

Im Bereich der Android-Projektentwicklung hat die Dauer der Verträge einen großen Einfluss auf die Auswahl eines geeigneten Architekturrahmens. Kürzere Vertragslaufzeiten stellen eine besondere Herausforderung dar, die in erster Linie auf den begrenzten Zeitrahmen zurückzuführen ist, der für das Onboarding und den Wissensaustausch zwischen den Teammitgliedern zur Verfügung steht.

Stellen Sie sich ein Szenario vor, bei dem die Projektverträge nur sechs Monate laufen. In solchen Fällen ist die rasche Einarbeitung in die Projektabläufe von größter Bedeutung, da nur wenig Spielraum für längere Lernkurven besteht. Hier erweist sich der von mir befürwortete Architekturansatz als vorteilhafte Wahl. Seine schlanke Struktur und die gezielte Schichtung erfordern weniger Zeit für die Wissensverbreitung, so dass sich die Teams schnell an die Projektanforderungen anpassen und den Entwicklungsprozess beschleunigen können.

Umgekehrt kann sich bei Projekten mit längeren Vertragslaufzeiten, die in der Regel die Sechs-Monats-Schwelle überschreiten, die umfassende Kapselung von Funktionen im Rahmen des von Wolfram vorgeschlagenen Ansatzes als vorteilhafter erweisen. Mit einem umfangreicheren Zeitrahmen zur Verfügung, können die Entwicklungsteams tiefer in die Feinheiten der Projektarchitektur eintauchen, was ein umfassenderes Verständnis und eine nahtlose Integration der verschiedenen Funktionskomponenten ermöglicht.

Entwirren der Rollendynamik und architektonische Überlegungen

Die verschiedenen Rollen innerhalb eines Anwendungsökosystems führen eine weitere Komplexitätsebene ein, die die Wahl eines geeigneten Architekturparadigmas erheblich beeinflusst. Stellen Sie sich eine Anwendung vor, die eine Vielzahl von Rollen beherbergt, darunter Administratoren, Betreuer, Redakteure, regelmäßige Benutzer und Premium-Abonnenten. In einer solch vielschichtigen Umgebung sind die Funktionalitäten, die jeder Rolle zugeordnet sind, oft unterschiedlich und voneinander getrennt, was zu einer natürlichen Affinität zu dem von Wolfram vorgeschlagenen Ansatz führt. Durch die Kapselung von Funktionen in unabhängigen Einheiten, die auf bestimmte Rollen ausgerichtet sind, trägt das architektonische Rahmenwerk den einzigartigen Anforderungen und Zugriffsprivilegien Rechnung, die mit jeder Benutzerkategorie verbunden sind, und fördert ein sichereres und effizienteres Anwendungsökosystem.

Umgekehrt wird bei Anwendungen, die durch eine einzelne Benutzerrolle gekennzeichnet sind, die Wahl zwischen Architekturstrategien flexibler. Sowohl der von mir vorgeschlagene Ansatz als auch die Kapselungsmethode von Wolfram bieten praktikable Optionen, die es den Entwicklern ermöglichen, die Architektur auf der Grundlage anderer kontextbezogener Faktoren wie dem Projektumfang und der Dynamik des Entwicklungsteams anzupassen.

Dokumentation für den Erfolg: Die Rolle der Kommunikation und des Wissensaustauschs

Effektive Kommunikation und umfassende Dokumentation sind die Grundlage für eine erfolgreiche Android-Projektentwicklung. In Fällen, in denen die Kommunikationskanäle ins Stocken geraten und der Wissenstransfer unsicher wird, erhöht sich das Risiko von Ineffizienzen und Code-Redundanzen erheblich. Hier zeigt sich der von mir vorgeschlagene Architekturansatz, der eine schlanke Struktur bietet, die die Abhängigkeit von einem umfangreichen Wissensaustausch minimiert. Durch die Aufteilung von Funktionalitäten und die Zentralisierung kritischer Komponenten entschärft der architektonische Rahmen die Herausforderungen, die mit einer unvollständigen Wissensverbreitung verbunden sind, und fördert so einen unabhängigeren und effizienteren Entwicklungsprozess.

In Umgebungen mit stabilen Kommunikationskanälen, umfassender Dokumentation und robusten Mechanismen für den Wissensaustausch wie UML-Diagrammen, Versionskontrolle durch Git und anderen kollaborativen Werkzeugen erweist sich der Ansatz von Wolfram hingegen als die günstigere Wahl. Mit einem gut dokumentierten und transparenten Entwicklungsprozess fördert die umfassende Kapselung von Funktionen innerhalb einzelner Einheiten eine bessere Zusammenarbeit und erleichtert einen kohärenten und synchronisierten Entwicklungsprozess.

Anpassung der Architektur an die Projektdynamik: Die entscheidende Rolle von Stabilität und Flexibilität

Die Anpassungsfähigkeit der Android-Projektarchitektur hängt von den grundlegenden Eigenschaften und der Dynamik des Projekts selbst ab. Ein kritischer Faktor, der sorgfältige Überlegungen erfordert, ist die Stabilität und Vorhersagbarkeit des Projektverlaufs. In Szenarien, in denen das Projekt in einem agilen Rahmen konzipiert wird, der durch häufige Iterationen und das Potenzial für dynamische Änderungen der Anforderungen gekennzeichnet ist, erweist sich der von mir vorgeschlagene Ansatz als die bevorzugte Wahl. Durch die Förderung eines modularen und flexiblen architektonischen Rahmens können sich die Entwickler schnell an die sich entwickelnde Projektdynamik anpassen und die nahtlose Integration neuer Funktionalitäten und Merkmale sicherstellen, ohne die Gesamtstabilität der Anwendung zu beeinträchtigen.

Umgekehrt kann bei Projekten, die durch einen festen und klar definierten Umfang gekennzeichnet sind und bei denen in absehbarer Zeit nur minimale Änderungen oder Iterationen zu erwarten sind, die umfassende Kapselung von Funktionen im Rahmen des Wolfram-Ansatzes als effektive architektonische Grundlage dienen. Durch die Konsolidierung der verschiedenen Schichten innerhalb jeder Funktionseinheit können die Entwickler den Entwicklungsprozess rationalisieren und die nahtlose Integration vorgegebener Funktionalitäten sicherstellen, wodurch ein stabiles und robustes Anwendungsgerüst gefördert wird.

In den folgenden Abschnitten werden wir die Bedeutung von Projektstabilität und -flexibilität für die Gestaltung der Architektur von Android-Anwendungen näher beleuchten. Durch die Untersuchung realer Fallstudien und praktischer Erkenntnisse möchten wir Entwicklern ein umfassendes Verständnis dafür vermitteln, wie die Projektdynamik den architektonischen Entscheidungsprozess bei der Entwicklung von Android-Anwendungen beeinflusst.

Abschluss

Wenn wir den Vorhang für unsere Erkundung der Android-Projektarchitektur schließen, kommen wir an einen entscheidenden Punkt, an dem das Zusammenspiel zahlreicher kontextbezogener Faktoren die nuancierte und vielschichtige Natur architektonischer Entscheidungen unterstreicht. Unsere Reise hat uns durch eine umfassende Untersuchung verschiedener Perspektiven geführt, die Teamdynamik, Vertragslaufzeiten, Bildschirmanzahl, rollenbasierte Funktionalitäten, Kommunikationsdynamik und Projektstabilität umfassen.

In diesem komplizierten Geflecht von Überlegungen haben wir betont, dass es keine Einheitslösung gibt, sondern dass wir stattdessen für einen ganzheitlichen Ansatz plädieren, der die Besonderheiten des jeweiligen Projektkontexts und der Anforderungen berücksichtigt. Die Dynamik der Android-Entwicklungslandschaft erfordert ein differenziertes Verständnis der verschiedenen Faktoren, die die architektonische Struktur moderner Anwendungen beeinflussen.

In Zukunft ermutigen wir Entwickler, eine anpassungsfähige Denkweise anzunehmen, die für die sich entwickelnden Bedürfnisse und die Dynamik der Projektumgebung empfänglich bleibt. Durch die Förderung einer Kultur des kontinuierlichen Lernens und Erforschens können Entwickler die Komplexität der Android-Projektarchitektur mit Zuversicht und Einsicht meistern und die Entwicklung robuster, skalierbarer und nutzerzentrierter Anwendungen sicherstellen, die den sich ständig ändernden Anforderungen der digitalen Welt gerecht werden.

Seien Sie dabei, wenn wir die sich entwickelnden Trends und Best Practices in der Android-Entwicklungslandschaft erforschen, um Entwicklern das nötige Wissen und die Tools an die Hand zu geben, mit denen sie innovative, zukunftsfähige Anwendungen erstellen können, die das digitale Erlebnis neu definieren.
Sind Sie auf der Suche nach Dienstleistungen für mobile Anwendungen? Werfen Sie einen Blick auf unsere Services.