Pengalaman Pemrograman Android Berprestasi

Posting ini, seperti yang dikatakan Kent Beck dalam bukunya, Pattern Patterns, “... didasarkan pada premis yang agak rapuh bahwa masalah kode yang baik ...”. Tapi kita semua tahu bahwa kode bersih itu penting karena kita harus berurusan begitu lama dengan kekurangannya. Dan Kent juga.

Kent Beck

Total Biaya Memiliki Mess

Beberapa tahun yang lalu, seperti halnya setiap pengembang Android naif yang bekerja di startup tahap awal di India, saya mencoba untuk "meretas" masalah dunia nyata, untuk "mengganggu industri" dan untuk menempatkan "penyok di alam semesta". Tanpa peduli di dunia tentang desain atau arsitektur perangkat lunak yang baik, saya mulai menulis kode untuk membangun aplikasi Android yang suatu hari akan menjadi salah satu aplikasi perawatan kesehatan konsumen terbesar di India.

Sprint demi sprint, hack demi hack, fitur dibangun dengan terburu-buru. Membangun. Mengukur. Belajar. Waktu ke pasar adalah penting dan setiap hari penting. Waktu berlalu, kami tumbuh pada tingkat 1 anggota tim setiap 6 bulan dan aplikasi telah mencapai angka jutaan unduhan.

Unduhan dan peringkat Google Play store aplikasi kami.

Pada saat ini, aplikasi telah berhenti menjadi sepele dan telah menjadi klien multi-tenant, jika itu hanya satu hal. Fitur yang akan memakan waktu berjam-jam ketika kami mulai sekarang butuh berhari-hari, terkadang berminggu-minggu. Setiap Aktivitas adalah 1000+ kode kode spaghetti karena Android secara inheren tidak terlalu khawatir tentang pemisahan masalah. Total biaya memiliki kekacauan secara signifikan memperlambat kami.

Teka-teki Android

Kode tampak jelek, Aktivitas mengatur segalanya:

  • Threading
  • I / O
  • Komputasi
  • Tata letak
  • Konfigurasi perubahan
  • Apa tidak

Lagipula, Aktivitas adalah Pengendali, kan? Atau apakah mereka Views? Saya tidak tahu lagi.

MVC

Grand Redesign In The Sky

Kami perlu merancang aplikasi dengan cara mengubah baris kode di suatu tempat tidak merusak sesuatu di tempat lain. Aplikasi tersebut harus, seperti yang dikatakan Paman Bob, "kuat tetapi tidak kaku, fleksibel tetapi tidak rapuh".

Robert

Saat itulah mentor dan teman saya Kashif Razzaqui bergabung dengan tim untuk membantu kami mengurangi kekacauan. Perancangan ulang yang hebat tidak pernah terjadi, tetapi kami membuka kembali kode kami:

  • Kami menambahkan lapisan "layanan" dan memindahkan semua kode non-UI ke dalamnya, satu layanan sekaligus.
  • Kami membuang AsyncTasks dan pindah ke ListenableFutures menggunakan Guava.
  • Kami membuang AsyncHttpClient untuk OkHttp.
  • Tetapi yang lebih penting, kami mulai membaca banyak: Kode Bersih, Arsitektur Bersih, SOLID, KERING, Programmer Pragmatis, Praktek Java Concurrency, Desain Berbasis Domain, dll.

Segera kami mulai melihat manfaat dari upaya kami. Produktivitas meningkat, kami menulis lebih cepat, semua orang senang.

Ini sampai kami menyatukan aplikasi kami dan semua hilang. Hanya memiliki lapisan layanan tambahan tidak memotongnya.

Seni Kode Bersih

Setelah menonton video Paman Bob tentang Arsitektur Bersih beberapa kali dan banyak membaca tentang arsitektur aplikasi Android, saya memutuskan untuk bereksperimen dengan pola desain MVP dan RxJava.

Beberapa hari setelah percobaan, kami memutuskan untuk beralih ke RxJava dan mengimplementasikan MVP menggunakan Arsitektur Bersih. Kami memastikan bahwa kami merangkum semua lapisan di belakang antarmuka dan memisahkan masalah dengan baik.

  • Tampilan, biasanya diterapkan oleh Fragmen, berisi referensi ke presenter. Satu-satunya hal yang akan dilakukan tampilan adalah memanggil metode dari Presenter setiap kali ada tindakan antarmuka.
  • Presenter bertanggung jawab untuk bertindak sebagai perantara antara View dan Model. Itu mengambil data dari Model dan mengembalikannya diformat ke tampilan. Tetapi tidak seperti MVC pada umumnya, ini juga menentukan apa yang terjadi ketika Anda berinteraksi dengan View.
  • Model ini hanya merupakan pintu gerbang ke lapisan domain atau logika bisnis.
  • Interactor berurusan dengan I / O dan merupakan penyedia data yang akan ditampilkan dalam View.

Sekarang lebih mudah untuk mengganti satu layer dengan implementasi yang benar-benar baru. Mendesain ulang UI, bagian tak terpisahkan dari pengembangan aplikasi Android, telah menjadi jauh lebih mudah. Banyak hal akhirnya bisa bergerak cepat tanpa putus.

Aturan Pramuka

Tidak cukup menulis kode dengan baik, kode harus tetap bersih seiring waktu. Fakta kehidupannya adalah bahwa perangkat lunak memiliki kecenderungan untuk entropi. Kita semua pernah melihat kode membusuk dan menurun dari waktu ke waktu sehingga kami meminjam aturan pramuka sederhana: "Tinggalkan perkemahan lebih bersih daripada yang Anda temukan."

Jika kita semua memeriksa kode kita sedikit lebih bersih daripada ketika kita memeriksanya, kode itu tidak bisa membusuk. Pembersihan tidak harus menjadi sesuatu yang besar. Ubah satu nama variabel menjadi lebih baik, pisahkan satu fungsi yang sedikit terlalu besar, hilangkan satu duplikasi kecil, bersihkan satu komposit jika pernyataan.

Kesimpulan

Cara kami membangun aplikasi yang skalabel mungkin tidak "benar" dan Anda mungkin tidak setuju dengan pos ini. Bagaimanapun, tidak semua seniman bela diri setuju tentang seni bela diri terbaik, atau teknik terbaik dalam satu;)

Ada banyak pendekatan berbeda terhadap MVP dan banyak solusi menarik untuk menyesuaikannya dengan Android. Satu fakta yang tidak dapat kami sangkal adalah bahwa Kode Bersih itu penting dan Anda tidak bisa menyapunya di bawah permadani.

Posting ini meminjam banyak dari Kode Bersih Paman Bob dan mencuri judul dari pembicaraan Droidcon Kashif dari 2011.

Jika Clean Code penting bagi Anda, mari ngobrol :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Jika Anda menyukai posting ini, silakan tekan hati kecil! ❤