Boilerplate in der App-Entwicklung: Was es ist, Beispiele und wie man es reduziert

Autor: IT Sectr Veröffentlicht: 2026-07-26 Lesezeit: 10 Min.

Boilerplate ist Template-Code, den Entwickler mit minimalen Änderungen in jedem neuen Modul oder Projekt schreiben. Er enthält keine einzigartige Geschäftslogik, sondern bereitet lediglich die Infrastruktur vor: Konfiguration, Bibliotheksimporte, Standard-Handler und DTO-Klassen. Laut dem CodeScene Engineering Productivity Report (2025) macht Boilerplate 20 bis 40 Prozent des gesamten Codes in einer typischen kommerziellen Anwendung aus. Das Hauptproblem solchen Codes ist nicht, dass er sich wiederholt, sondern dass jede Wiederholung ein Fehlerpunkt ist: Ein Fehler in einer Kopie wird nicht mit anderen synchronisiert, und Bugs vermehren sich im Projekt. Die Automatisierung der Boilerplate-Generierung durch Codegenerierung, Annotationen und Makros ist eine der effektivsten Möglichkeiten, die Entwicklung zu beschleunigen, ohne Qualität zu verlieren.

Wichtigste Punkte

  • Boilerplate — Template-Code, der sich ohne Änderung der Geschäftslogik von Modul zu Modul wiederholt.
  • Hauptquellen: DI-Konfiguration, DTO-Klassen, Formularbildschirme, Netzwerkanfragen und ORM-Mapping.
  • Boilerplate verlangsamt die Entwicklung und erhöht die Fehleranzahl beim Kopieren.
  • Reduzierungswerkzeuge: Codegenerierung, Annotationen (Lombok, Data-Klassen), Makros und Bildschirmgeneratoren.
  • Das Ziel ist nicht, Boilerplate vollständig zu entfernen, sondern seine Erstellung und Synchronisierung zu automatisieren.

Was ist Boilerplate?

Boilerplate-Code sind Fragmente von Quellcode, die sich in verschiedenen Teilen eines Projekts mit minimalen Variationen wiederholen. Der Begriff stammt aus der Druckindustrie, wo Boilerplate vorbereitete Textblöcke für Zeitungen bezeichnete, die nicht neu geschrieben werden mussten. In der Programmierung ist es jeder Code, den Sie immer wieder schreiben müssen, um die Anforderungen eines Frameworks, einer Sprache oder einer Architektur zu erfüllen.

Boilerplate ist im klassischen Sinne keine technische Schuld — er enthält keine Fehler und verletzt keine SOLID-Prinzipien. Er erhöht jedoch die Menge an Code, der gewartet, getestet und gelesen werden muss. Jede Zeile Boilerplate ist eine potenzielle Stelle für einen Tippfehler, den der Compiler nicht immer abfangen kann.

Laut dem Bericht JetBrains Developer Ecosystem (2025) betrachten 67 Prozent der Entwickler Boilerplate als Hauptursache für Produktivitätseinbußen. In der mobilen Entwicklung ist dieser Wert höher: Android-Projekte in Java enthalten eine erhebliche Menge an Template-Code für findViewById, Intents, RecyclerView-Adapter und ContentProvider. Kotlin und Swift haben einige dieser Probleme mit syntaktischen Mitteln gelöst, aber Boilerplate ist nicht vollständig verschwunden.

Versuchen Sie bei der Architekturgestaltung, Lösungen zu wählen, die Template-Code minimieren. Verwenden Sie zum Beispiel anstelle der manuellen Implementierung von Parcelable @Parcelize in Kotlin. Anstelle von Fabriken für ViewModel — Hilt mit @HiltViewModel. Jede solche Optimierung spart Stunden an Entwicklung im Projektmaßstab.

Beispiele für Boilerplate in mobilen Projekten

Das bekannteste Beispiel für Boilerplate in der Android-Entwicklung ist der RecyclerView.Adapter. Vor Kotlin und ViewBinding erforderte jeder Adapter etwa 80–100 Zeilen Template-Code: onCreateViewHolder, onBindViewHolder, getItemCount, innere ViewHolder-Klasse, Konstruktor, Feldbindung. Mit ViewBinding wurde der Code reduziert, ist aber nicht vollständig verschwunden.

Adapter-Boilerplate ohne Optimierungen

kotlin
class UserAdapter(
    private val users: List<User>
) : RecyclerView.Adapter<UserAdapter.ViewHolder>() {

    override fun onCreateViewHolder(
        parent: ViewGroup,
        viewType: Int
    ): ViewHolder {
        val view = LayoutInflater
            .from(parent.context)
            .inflate(R.layout.item_user, parent, false)
        return ViewHolder(view)
    }

    override fun onBindViewHolder(
        holder: ViewHolder,
        position: Int
    ) {
        holder.bind(users[position])
    }

    override fun getItemCount(): Int = users.size

    class ViewHolder(itemView: View) :
        RecyclerView.ViewHolder(itemView) {
        fun bind(user: User) {
            Glide.with(itemView)
                .load(user.avatarUrl)
                .into(itemView.avatar)
        }
    }
}

Ein weiteres anschauliches Beispiel ist JSON-Mapping in Java ohne Bibliotheken. Das manuelle Parsen einer API-Antwort erfordert das Schreiben Dutzender Methoden, die jeweils das Vorhandensein eines Schlüssels prüfen, den Wert abrufen und einem Feld zuweisen. Mit Bibliotheken wie Gson, Moshi oder Kotlin Serialization ist es eine @Serializable-Annotation.

In der iOS-Entwicklung ist der klassische Boilerplate die Implementierung von CodingKey und Decodable für jede API-Antwort, insbesondere wenn JSON-Schlüssel von den camelCase-Eigenschaftsnamen abweichen. Trotz der automatischen Codable-Generierung bleibt die manuelle Auflistung von CodingKeys eine Quelle von Template-Code.

Verwenden Sie Codegenerierung, um Boilerplate zur Build-Zeit zu erstellen. In Android — Annotation Processing (KSP) für Room, Dagger, Moshi. In iOS — Sourcery für Codable und AutoMockable. Für jede Stunde, die Sie für die Einrichtung der Generierung aufwenden, sparen Sie Tage an manuellem Kopieren.

Warum Template-Code schädlich ist

Boilerplate schadet einem Projekt auf drei Arten: Er verlangsamt das Schreiben neuer Funktionalität, erschwert das Lesen vorhandenen Codes und schafft Desynchronisationspunkte bei Änderungen.

Die Verlangsamung der Entwicklung ist offensichtlich: Ein Entwickler verbringt Zeit mit dem Schreiben von Code, der keine Geschäftslogik enthält. Anstatt eine neue Funktion zu implementieren (z. B. ein Feld zu einem Benutzerprofil hinzuzufügen), schreibt er eine DB-Migration, DTO-Klasse, Mapper zur Domain-Entität, Bildschirm mit Eingabefeld, Validierung und Tests für jede Schicht. Der Großteil dieser Arbeit ist mechanisch.

Desynchronisation ist ein heimtückischeres Problem. Wenn sich eine Datenstruktur an einer Stelle ändert (z. B. wird ein Feld zu einer API-Antwort hinzugefügt), muss der Entwickler das DTO, den Mapper, das Modell, den Bildschirm und die Tests aktualisieren. Wenn eine Stelle übersehen wird, kompiliert die Anwendung, stürzt aber zur Laufzeit ab — oder schlimmer noch, zeigt fehlerhafte Daten ohne Fehler an. Je mehr Boilerplate-Schichten, desto höher die Wahrscheinlichkeit einer solchen Desynchronisation.

Analysieren Sie das Projekt auf wiederkehrende Muster. Wenn Sie drei identische Klassen mit unterschiedlichen Namen sehen — das ist ein Kandidat für die Generierung. Führen Sie Codegenerierung als Teil der architektonischen Lösung ein, nicht als einmalige Optimierung. Sie zahlt sich bei jedem neuen Modul aus.

Codegenerierung zur Boilerplate-Automatisierung

Codegenerierung ist der zuverlässigste Weg, Boilerplate zu bekämpfen. Anstatt Template-Code manuell zu schreiben, beschreibt der Entwickler Metadaten (Annotationen, Schemata, Konfigurationen), und der Generator erstellt zur Kompilierzeit fertigen Code.

Im Android-Ökosystem ist das Standardwerkzeug zur Codegenerierung KSP (Kotlin Symbol Processing). Es ersetzt das veraltete KAPT und arbeitet durch direkten Zugriff auf das Kotlin AST ohne Generierung von Java-Stubs schneller. KSP wird von Room (DAO-Implementierungsgenerierung), Moshi (JsonAdapter-Generierung), Glide (Zielladeklassengenerierung) und Dagger (DI-Graphengenerierung) verwendet.

Room-Entitätsgenerierung mit KSP

kotlin
@Entity(tableName = "users")
data class UserEntity(
    @PrimaryKey val id: Long,
    @ColumnInfo(name = "full_name") val name: String,
    @ColumnInfo(name = "avatar_url") val avatarUrl: String
)

@Dao
interface UserDao {
    @Query("SELECT * FROM users WHERE id = :id")
    suspend fun getById(@Param("id") id: Long): UserEntity?
}

In der iOS-Entwicklung übernimmt Sourcery die Rolle der Codegenerierung — ein Tool, das Stencil-Vorlagen verarbeitet und basierend auf Annotationen in Kommentaren Swift-Code generiert. Typische Szenarien: AutoMockable (Mock-Generierung für Tests), AutoCodable (Decodable-Implementierung ohne CodingKeys), AutoEquatable und AutoLenses.

Für Flutter-Projekte wird Boilerplate durch Generatoren über build_runner reduziert: json_serializable für JSON-Mapping, freezed für unveränderliche Modelle mit copyWith, retrofit_generator für API-Clients und injectable_generator für DI. Jeder dieser Generatoren verwandelt 10–20 Zeilen Annotationen in Hunderte von Zeilen fertigen Codes.

Reduzierung durch Annotationen und Makros

Annotationen und Makros sind eine deklarative Möglichkeit, dem Compiler oder Präprozessor mitzuteilen, welcher Code generiert werden soll. Der Entwickler schreibt nicht die Implementierung, sondern markiert nur die Absicht, und der Generator verwandelt die Markierung in fertigen Code.

Das bekannteste Beispiel ist Lombok in Java (historisch) und Kotlin data class. Die Data Class in Kotlin generiert automatisch equals, hashCode, toString, componentN und copy — in Java wären dafür etwa 80 Zeilen handgeschriebener Code oder die Verwendung von Lombok mit @Data erforderlich. Kotlin hat das Problem auf Sprachebene gelöst und Boilerplate implizit gemacht.

In Swift übernehmen Makros (Swift Macros, eingeführt in Swift 5.9) eine ähnliche Rolle. Anstatt die Codable-Implementierung manuell zu schreiben, markiert der Entwickler die Struktur mit @Codable — und der Compiler generiert den erforderlichen Code. Andere eingebaute Makros: @Observable (beobachtbarer Zustand), @ResultBuilder (Ergebnis-Builder) und @MainActor (Dispatch auf den Hauptthread).

swift
@Codable
struct UserProfile {
    let id: Int
    let displayName: String
    let avatarURL: URL
    let bio: String?
}

// @Codable macro generates:
// extension UserProfile: Codable { }
// private enum CodingKeys: String, CodingKey {
//     case id, displayName, avatarURL, bio
// }

Bei der Wahl zwischen Codegenerierung und Makros bevorzugen Sie Makros, wenn die Sprache sie unterstützt. Makros arbeiten auf Compiler-Ebene, erfordern keine Build-Script-Konfiguration, verlangsamen die Kompilierung nicht (im Gegensatz zu Annotation Processing) und sind immer mit dem Quellcode synchronisiert. Wenn Makros nicht verfügbar sind — verwenden Sie externe Generatoren über KSP, Sourcery oder build_runner.

Sprachspezifische Reduzierungspraktiken

Jede Sprache und Plattform bietet eigene Werkzeuge zur Minimierung von Boilerplate. Nachfolgend finden Sie spezifische Praktiken für die wichtigsten mobilen Entwicklungsstacks.

PlattformWerkzeug / TechnikErsetzt
Android / Kotlindata classequals, hashCode, toString, copy, componentN
Android / Kotlin@ParcelizeParcelable-Implementierung
Android / KotlinViewBinding / DataBindingfindViewById, ButterKnife
iOS / SwiftCodable + MakrosManuelles JSON-Parsing, CodingKeys
iOS / SwiftSourceryAutoMockable, AutoEquatable, AutoLenses
Flutter / Dartfreezed + json_serializablecopyWith, versiegelte Klassen, equals/hashCode, JSON
Flutter / Dartretrofit_generatorAPI-Client mit typisierten Anfragen und Antworten

Für das Web-Frontend (React Native / TypeScript) ist das wichtigste Werkzeug die Typgenerierung aus der OpenAPI-Spezifikation (openapi-typescript, swagger-codegen). Jeder Endpunkt erhält automatisch eine typisierte Anfrage und Antwort — der Entwickler muss nicht manuell Schnittstellen für hunderte API-Aufrufe beschreiben.

Führen Sie Codegenerierung in frühen Projektphasen ein. Die Migration eines bestehenden Projekts auf Generatoren ist schwieriger als die Planung mit ihnen von Grund auf. Wenn das Projekt bereits geschrieben ist — beginnen Sie mit dem schmerzhaftesten Punkt: Java → Kotlin (data class), manuelle Adapter → ListAdapter mit DiffUtil, manuelles JSON-Mapping → Moshi / Kotlin Serialization.

Häufig gestellte Fragen

Wie unterscheidet sich Boilerplate von technischen Schulden?

Boilerplate ist keine Schuld, sondern Redundanz: Der Code ist korrekt, aber es gibt zu viel davon. Technische Schulden sind eine bewusste Kompromissentscheidung, die später korrigiert werden muss. Boilerplate erfordert keine Korrektur — er erfordert Automatisierung.

Ist es immer schlecht, Boilerplate zu haben?

Nein, in kleinen Projekten kann Boilerplate durch Einfachheit gerechtfertigt sein: Er ist sofort sichtbar und leicht zu ändern. Das Problem entsteht im Maßstab — wenn es mehr als zehn ähnliche Module gibt, wird manuelles Kopieren ineffektiv und es ist Zeit, Generierung einzuführen.

Welcher Boilerplate kann nicht automatisiert werden?

Code, der von externen Diensten mit nicht standardmäßiger Logik (benutzerdefinierte SDKs, proprietäre Protokolle) abhängt, ist schwer zu generieren. In solchen Fällen wird Boilerplate manuell geschrieben, aber in separate Module isoliert, um die Streuung im Projekt zu minimieren.

Sollte man Lombok in neuen Java-Projekten verwenden?

Für neue Projekte ist es besser, direkt auf Kotlin umzusteigen, wo Data Class die gleichen Aufgaben auf Sprachebene löst. Wenn das Projekt bei Java bleibt — bleibt Lombok der De-facto-Standard, aber beachten Sie, dass es ein IDE-Plugin erfordert und mit neuen Java-Versionen in Konflikt geraten kann.

Erhöht Codegenerierung die Build-Zeit?

Ja, Codegenerierung fügt der Build-Zeit Zeit hinzu. KSP arbeitet schneller als KAPT, fügt aber dennoch Sekunden oder Minuten zu einem vollständigen Build hinzu. Optimierung: Verwenden Sie inkrementelle Builds und cachen Sie Generierungsergebnisse zwischen Builds.

Zusammenfassung

  • Boilerplate — Template-Code, der sich in jedem Modul wiederholt und keine einzigartige Geschäftslogik enthält.
  • Hauptquellen: DTO-Klassen, Mapper, Netzwerkanfragen, Adapter, DI-Konfiguration und ORM-Entitäten.
  • Boilerplate verlangsamt die Entwicklung, erhöht das Risiko der Desynchronisation und erschwert das Lesen von Code.
  • Die Hauptmethode zur Bekämpfung — Codegenerierung über KSP, Sourcery, build_runner oder openapi-typescript.
  • Annotationen und Makros (data class, Codable, @Parcelize, freezed) automatisieren die häufigsten Muster.
  • Wählen Sie Codegenerierung in der Architekturentwurfsphase, nicht als verspätete Optimierung.
  • Jede Sprache hat ihre eigenen Werkzeuge: Kotlin data class, Swift Makros, Dart freezed — verwenden Sie sie standardmäßig.

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch