Panduan modularisasi aplikasi Android

Project yang memiliki beberapa modul Gradle dikenal sebagai project multi-modul. Panduan ini mencakup praktik terbaik dan pola yang direkomendasikan untuk mengembangkan aplikasi Android multi-modul.

Masalah codebase yang terus berkembang

Pada codebase yang terus berkembang, skalabilitas, keterbacaan, dan kualitas kode secara keseluruhan sering kali berkurang seiring waktu. Hal ini terjadi karena ukuran codebase bertambah tetapi pengelolanya tidak melakukan tindakan aktif untuk menerapkan struktur yang mudah dikelola. Modularisasi adalah cara untuk membuat struktur codebase Anda dengan cara yang meningkatkan kemudahan pengelolaan dan membantu menghindari masalah ini.

Apa yang dimaksud dengan modularisasi?

Modularisasi adalah praktik mengatur codebase ke dalam bagian-bagian yang dikaitkan secara longgar dan berdiri sendiri. Setiap bagian merupakan modul. Setiap modul bersifat independen dan memiliki tujuan yang jelas. Dengan membagi masalah menjadi lebih kecil dan lebih mudah untuk menyelesaikan sub-masalah, Anda akan mengurangi kerumitan dalam mendesain dan mempertahankan sistem yang besar.

Gambar 1: Grafik dependensi sampel codebase multi-modul

Manfaat modularisasi

Manfaat modularisasi sangat banyak, meskipun masing-masing berfokus pada peningkatan pengelolaan dan kualitas codebase secara keseluruhan. Tabel berikut merangkum manfaat utama.

Manfaat Ringkasan
Penggunaan kembali Modularisasi memungkinkan peluang untuk berbagi kode dan mem-build beberapa aplikasi dari fondasi yang sama. Modul merupakan elemen penyusun yang efektif. Aplikasi seharusnya merupakan kumpulan dari sejumlah fitur yang fiturnya diatur sebagai modul terpisah. Fungsi yang disediakan modul tertentu mungkin diaktifkan atau tidak diaktifkan dalam aplikasi tertentu. Misalnya, :feature:news dapat menjadi bagian dari ragam dan aplikasi Wear versi lengkap, tetapi bukan bagian dari ragam versi demo.
Kontrol visibilitas yang ketat Modul memungkinkan Anda mengontrol apa yang diekspos ke bagian lain codebase Anda dengan mudah. Anda dapat menandai semuanya kecuali antarmuka publik sebagai internal atau private agar tidak digunakan di luar modul.
Pengiriman yang dapat disesuaikan Play Feature Delivery menggunakan kemampuan app bundle tingkat lanjut, sehingga Anda dapat mengirimkan fitur tertentu dari aplikasi Anda secara bersyarat atau on demand.

Manfaat di atas hanya dapat dicapai dengan codebase modular. Manfaat berikut mungkin dapat dicapai dengan teknik lain, tetapi modularisasi dapat membantu Anda menerapkannya lebih jauh lagi.

Manfaat Ringkasan
Skalabilitas Dalam codebase yang terkait erat, satu perubahan dapat memicu penurunan perubahan di bagian kode yang tampaknya tidak berkaitan. Project yang dimodularisasi dengan benar akan mendukung prinsip pemisahan masalah dan akan membatasi pengaitan. Hal ini memberdayakan kontributor melalui otonomi yang lebih besar.
Kepemilikan Selain mengaktifkan otonomi, modul juga dapat digunakan untuk menerapkan akuntabilitas. Modul dapat memiliki pemilik khusus yang bertanggung jawab untuk mengelola kode, memperbaiki bug, menambahkan pengujian, dan meninjau perubahan.
Enkapsulasi Enkapsulasi berarti setiap bagian kode Anda harus memiliki sesedikit mungkin pengetahuan tentang bagian lain. Kode terisolasi lebih mudah dibaca dan dipahami.
Kemampuan pengujian Kemampuan pengujian menunjukkan seberapa mudah pengujian kode Anda. Kode yang dapat diuji adalah kode tempat komponen dapat dengan mudah diuji secara terpisah.
Waktu build Beberapa fungsi Gradle seperti build inkremental, cache build, atau build paralel, dapat memanfaatkan modularitas untuk meningkatkan performa build.

Kesalahan umum

Tingkat perincian codebase Anda adalah sejauh mana terdiri dari modul. Codebase yang lebih terperinci memiliki lebih banyak modul yang lebih kecil. Saat mendesain codebase modular, Anda harus memutuskan tingkat perincian. Untuk melakukannya, perhitungkan ukuran codebase dan kompleksitas relatifnya. Penerapan yang terlalu detail akan menimbulkan beban overhead, dan penerapan yang terlalu samar akan mengurangi manfaat modularisasi.

Beberapa kesalahan umum adalah sebagai berikut:

  • Terlalu detail: Setiap modul menghasilkan jumlah overhead tertentu dalam bentuk peningkatan kompleksitas build dan kode boilerplate. Konfigurasi build yang kompleks mempersulit untuk menjaga konfigurasi tetap konsisten di seluruh modul. Terlalu banyak kode boilerplate mengakibatkan codebase rumit yang sulit dikelola. Jika overhead melawan peningkatan skalabilitas, Anda harus mempertimbangkan untuk menggabungkan beberapa modul.
  • Terlalu samar: Sebaliknya, jika modul Anda tumbuh terlalu besar, Anda mungkin akan mendapatkan monolit lain dan melewatkan manfaat yang ditawarkan modularitas. Misalnya, dalam project kecil, Anda dapat menempatkan lapisan data di dalam satu modul. Namun seiring pertumbuhannya, repositori dan sumber data mungkin perlu dipisahkan menjadi modul yang berdiri sendiri.
  • Terlalu rumit: Memodularisasi project Anda tidak selalu masuk akal. Faktor yang mendominasi adalah ukuran codebase. Jika Anda tidak mengharapkan project berkembang melebihi batas tertentu, skalabilitas dan waktu build tidak akan berlaku.

Apakah modularisasi adalah teknik yang tepat untuk saya?

Jika Anda memerlukan manfaat penggunaan kembali, kontrol visibilitas yang ketat, atau penggunaan Play Feature Delivery, modularisasi adalah kebutuhan bagi Anda. Jika tidak, tetapi masih ingin mendapatkan manfaat dari skalabilitas, kepemilikan, enkapsulasi, atau waktu build yang lebih baik, modularisasi adalah hal yang penting dipertimbangkan.

Contoh