

Proyek ini adalah implementasi longgar dari arsitektur bersih seperti yang disajikan dalam buku saya, Clean Architecture for Android. Ini adalah proyek Android asli yang ditulis di Kotlin. Ini menunjukkan prinsip -prinsip utama yang disajikan dalam buku ini dan bagaimana mereka berlaku untuk proyek kehidupan nyata.
Saya akan berusaha untuk menjaga agar proyek ini tetap up to date dan menggunakannya untuk menunjukkan kekuatan arsitektur: skalabilitas , testabilitas , dan fleksibilitas ketika datang untuk memilih solusi pihak ke -3.
Kesederhanaan
" Kompleksitas yang diperkenalkan di sini adalah berlebihan! "
Saya setuju. Jika ini menjadi proyek akhir , di mana tidak ada fungsi baru yang akan ditambahkan, maka arsitektur bersih akan terlalu rumit untuk itu. Namun, kenyataannya adalah proyek seluler jarang final. Umpan Balik Pengguna, Persyaratan Pemasaran, Teknologi Baru - Faktor -faktor ini dan lainnya semuanya mengarah pada perubahan berkelanjutan pada hampir setiap proyek. Jadi, apa yang sekarang tampak seperti terlalu banyak kompleksitas akan memberi penghargaan kepada kita ketika waktu untuk perubahan tiba. Ini akan terjadi saat arsitektur bersih bersinar.
Sebagai catatan: Dalam beberapa hal, saya sengaja merumahkan proyek ini dengan memperkenalkan berbagai teknologi. Tujuannya adalah untuk menunjukkan bagaimana, bahkan dalam skenario kehidupan nyata, di mana sebuah proyek mungkin telah tumbuh dari waktu ke waktu untuk memasukkan lebih dari satu solusi teknologi, arsitekturnya masih berfungsi.
Mappers sebagai Kelas vs. Fungsi Ekstensi Pemetaan
Saat memetakan antar model, kami memiliki beberapa opsi. Keputusan utama adalah antara kelas mapper dan fungsi ekstensi pemetaan.
Sementara fungsi ekstensi lebih ringkas, menggunakannya untuk memetakan batasan kerangka kerja pengujian kami (mockito, misalnya, tidak dapat mematikan fungsi statis).
Bagaimana kalau menyuntikkan fungsi ekstensi mapper? Kami bisa melakukan itu. Namun, ini menghilangkan manfaat keringkasan hampir seluruhnya. Ini juga membuat navigasi ke implementasi lebih sulit.
Jadi, saya memilih kelas mapper beton yang sedikit lebih banyak.
Melewatkan komponen arsitektur Google
Masalah terbesar dengan komponen arsitektur Google adalah bahwa mereka membocorkan detail Android ke lapisan presentasi. Ini mencegah lapisan presentasi menjadi agnostik yang benar -benar UI.
Masalah lain dengan komponen arsitektur adalah bahwa mereka memberikan terlalu banyak tanggung jawab kepada ViewModel. Mereka membuatnya tetap menyatakan tidak ada, yang mengarah ke bug sinkronisasi data potensial.
Untuk alasan ini, sementara masih mengikuti MVVM, proyek ini bergantung pada aliran Kotlin daripada Livedata , dan mengimplementasikan viewmodels murni daripada Google.
Kerangka kerja mengejek
Baik mockito-Kotlin dan mockk digunakan dalam proyek ini untuk menunjukkan bagaimana penggunaan masing-masing akan terlihat.
Preferensi pribadi saya tetap mockito-Kotlin . Saya menemukan kode lebih mudah dibaca dan diikuti saat menggunakannya. Pada saat penulisan, dilihat dari jumlah bintang di setiap repositori, industri tampaknya condong ke Mockk.
Saya ditanya tentang menggunakan palsu . Saya telah menjelajahi palsu, dan menemukan mereka terlalu bertele -tele dan terlalu mahal untuk dirawat.
Kerangka Injeksi Ketergantungan
Bagian penting dari sebagian besar aplikasi modern, Injeksi Ketergantungan (DI) membantu kita mendapatkan objek yang membangun aplikasi kita. Ini juga membantu mengelola ruang lingkup mereka. Pilihan paling populer di dunia Android adalah Hilt (yang dibangun di atas belati) dan Koin.
Hilt dipilih karena dua alasan utama:
Xml vs jetpack menyusun
Mengapa tidak keduanya? Saya masih memiliki banyak kekhawatiran di sekitar komposisi Jetpack . Meski begitu, penting bagi saya untuk menunjukkan arsitektur yang disajikan bekerja dengan baik terlepas dari mekanisme UI yang dipilih. Sebagai latihan, saya mengundang Anda untuk mencoba dan mengganti lapisan UI dari komposisi ke XML atau sebaliknya tanpa memperbarui lapisan presentasi.
Arsitektur Bersih untuk Android di Amazon
Arsitektur bersih di blog Clean Coder
Kontribusi untuk proyek ini dipersilakan. Jangan ragu untuk melaporkan masalah atau garpu untuk membuat perubahan dan mengajukan permintaan tarik.
Proyek ini didistribusikan berdasarkan ketentuan lisensi MIT. Lihat lisensi.md untuk detailnya.