Qattiq ishlaydigan Android dasturlash tajribasi

Kent Bek kabi, bu xabar "Amalga oshirish naqshlari" kitobida aytadiki, "... yaxshi kod muhim ahamiyatga ega bo'lgan nozik nuqtai nazarga asoslangan ...". Ammo barchamiz yaxshi bilamizki, toza kod juda muhim, chunki uning etishmasligi bilan uzoq vaqt davomida shug'ullanib keldik. Kent ham shunday qiladi.

Kent Bek

Xabarga ega bo'lishning umumiy qiymati

Bir necha yil oldin, Hindistonda boshlang'ich startapda ishlaydigan har qanday sodda Android ishlab chiqaruvchisi kabi, men real dunyo muammolarini "buzib tashlash", "sohani buzish" va "koinotga tish" qo'yishga harakat qildim. Dunyoda yaxshi dasturiy ta'minot dizayni yoki arxitekturasi haqida qayg'urmasdan, men bir kun Hindistondagi eng katta iste'molchilarni davolash dasturlaridan biriga aylanadigan Android dasturini yaratish uchun kod yozishni boshladim.

Sprintdan keyingi Sprint, hackdan keyin hack, xususiyatlar aqldan ozgan holda qurilgan. Qurmoq. O'lchash. O'rganing. Vaqtni bozor qilish muhim edi va har kuni muhim edi. Vaqt o'tgan sayin biz har 6 oyda 1 ta jamoa a'zosining soniga o'sib borar edik va ilova millionlab yuklab olish belgilariga tushib qoldi.

Bizning ilova Google Play do'konida yuklab olish va reyting.

Bu vaqtga kelib, ilova ahamiyatsiz bo'lishni to'xtatdi va u ko'p ijarachiga aylandi, agar bu narsa bo'lsa. Hozir boshlaganimizda soatlab davom etadigan xususiyatlar bir necha kun, ba'zan haftalarni qamrab oldi. Har bir faoliyat spagetti kodining 1000+ qatorini tashkil etdi, chunki Android tashvishlarni ajratish uchun juda tashvishlanmaydi. Shovqin-suronga ega bo'lishning umumiy qiymati bizni sezilarli darajada sekinlashtirdi.

Android Conundrum

Kod yomon ko'rinishga ega, Faoliyat hamma narsani boshqaradi:

  • Tishli
  • I / O
  • Hisoblash
  • Sxemalar
  • O'zgarishlarni sozlash
  • Yo'q

Axir, faoliyatlar kontrollerlar, to'g'rimi? Yoki ular Ko'rinadimi? Men endi bilmasdim.

MVC

Osmonda Buyuk Qayta dizayn

Ilovani biron bir joyda kod qatorini o'zgartirish boshqa biron bir joyda buzilmasligi uchun loyihalashtirishimiz kerak edi. Ilova, Bob amaki aytganidek, "kuchli, ammo qattiq, egiluvchan, ammo mo'rt emas".

Robert

Bu mening ustozim va do'stim Kashif Razzaqui jamoamizga tartibsizliklarni engillashtirishda yordam berish uchun qo'shilgan payt edi. Katta qayta qurish hech qachon sodir bo'lmagan, ammo biz do'zaxni o'z kodimizdan chiqarib tashladik:

  • Biz "xizmat" qatlamini qo'shdik va barcha UI-kodlarni birdaniga bitta xizmatga uladik.
  • Biz AsyncTasks-ni chuck qildik va Guava-dan foydalanib, Tinglanuvchi xususiyatlarga o'tdik.
  • Biz OkHttp uchun AsyncHttpClient-ni tashladik.
  • Ammo bundan ham muhimi, biz juda ko'p narsalarni o'qishni boshladik: toza kod, toza arxitektura, SOLID, DRY, pragmatik dasturchi, amaliyotda Java muvofiqligi, domen boshqariladigan dizayni va boshqalar.

Ko'p o'tmay, harakatlarimiz samarasini ko'rishni boshladik. Hosildorlik oshdi, biz tezroq narsalarni yoza boshladik, hamma xursand edi.

Bu bizning ilovalarimizni birlashtirmagunimizcha va barcha do'zax yo'qolguncha. Faqat qo'shimcha xizmat qatlamiga ega bo'lish uni kesib tashlamadi.

Toza Kodeks San'ati

Bob Uncle-ning "Arxitektura" dagi videolarini bir necha bor ko'rganimdan va Android ilovasining arxitekturasida ko'p o'qiganimdan so'ng, men MVP dizayn naqshlari va RxJava bilan tajriba o'tkazishga qaror qildim.

Eksperimentdan bir necha kun o'tgach, biz RxJava-ga o'tishga va Clean Architecture-dan foydalanib MVP-ni amalga oshirishga qaror qildik. Biz barcha interfeyslarni interfeyslar orqasida kapsüllədiyimizga va ajratilgan tashvishlarni yaxshi bajarganimizga ishonch hosil qildik.

  • Odatda, Fragment tomonidan amalga oshiriladigan Ko'rgazmada taqdimotchiga havola mavjud. Ko'rinishni amalga oshiradigan yagona narsa - har safar interfeys harakati mavjud bo'lganda, ma'ruzachidan usul chaqirish.
  • Taqdimotchi View va Model o'rtasida o'rtadagi odam rolini o'ynashga javobgardir. U Modeldan ma'lumotlarni oladi va uni formatlash uchun View-ga qaytaradi. Ammo odatiy MVC-dan farqli o'laroq, u View bilan aloqada bo'lganda nima bo'lishini ham hal qiladi.
  • Model faqatgina domen qatlami yoki biznes mantig'iga kirish eshigi.
  • Interaktor I / O bilan shug'ullanadi va Ko'rishda aks ettirilishi kerak bo'lgan ma'lumotlarni etkazib beruvchi hisoblanadi.

Endi bitta qavatni mutlaqo yangi amalga oshirish bilan o'chirish osonroq. Android ilovalarini ishlab chiqishning bir qismi va bir qismi bo'lgan UI-ni qayta loyihalash ancha osonlashdi. Nihoyat narsalar buzilmasdan tez harakatlanishi mumkin.

O'g'il bolalar skautining qoidasi

Kodni yaxshi yozish uchun bu etarli emas, vaqt o'tishi bilan kodni toza saqlash kerak. Hayot haqiqati shundaki, dasturiy ta'minot entropiyaga moyil. Vaqt o'tishi bilan biz buzilish va buzilishlarni ko'rdik, shuning uchun biz oddiy skautlar: "Lagerni topgandan ko'ra tozaroq qoldiring" degan qoidaga amal qildik.

Agar biz kodni tekshirganimizdan ozroq tozalagan bo'lsak, kod buzilib ketolmaydi. Tozalash katta narsa bo'lishi shart emas. Bitta o'zgaruvchan nomni yaxshi tomonga o'zgartiring, juda katta bo'lgan bitta funktsiyani buzing, bitta ozgina takrorlanishni yo'q qiling, if if if kompozitni tozalang.

Xulosa

Kengaytiriladigan ilovani yaratish usulimiz "to'g'ri" bo'lmasligi mumkin va siz ushbu xabarga qo'shilmasligingiz mumkin. Oxir-oqibat, barcha jang san'atlari ham eng yaxshi jang san'ati yoki eng yaxshi uslub haqida bitta fikrga qo'shilmaydi;)

MVP-ga turli xil yondashuvlar mavjud va uni Android-ga moslashtirish uchun juda ko'p qiziqarli echimlar mavjud. Biz inkor etolmaydigan yagona narsa shundaki, Toza Kod muhim va siz uni gilamchani supurib tashlay olmaysiz.

Ushbu post Bob amakining toza kodidan katta miqdorda qarz oladi va 2011 yildan boshlab Kashifning Droidcon nutqidan unvonni o'g'irlaydi.

Agar Toza Kod siz uchun muhim bo'lsa, keling suhbatlashaylik :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Agar siz ushbu xabarni yoqtirgan bo'lsangiz, iltimos kichkina yurakka uring! ❤