Sərt Qazanan Android Proqram Təcrübələri

Kent Beck, "Həyat Nümunələri" kitabında deyildiyi kimi, bu yazı "... yaxşı kodun vacib olduğu olduqca kövrək bir təməl üzərində qurulmuşdur ...". Ancaq hamımız bilirik ki, təmiz kodun olmaması ilə bu qədər uzun müddət məşğul olmağımız lazım idi. Kent də belə edir.

Kent Beck

Bir mesaj sahibi olmağın ümumi dəyəri

Bir neçə il əvvəl, Hindistanda erkən bir başlanğıcda işləyən hər bir sadəlövh bir Android inkişaf etdiricisi kimi, mən də real dünya problemlərini "gizlətməyə", "sənayeni pozmağa" və "kainatda əyri" qoymağa çalışdım. Dünyada yaxşı bir proqram dizaynı və ya arxitekturası ilə maraqlanmadan, bir gün Hindistanda ən böyük istehlakçı sağım tətbiqlərindən biri olacaq bir Android tətbiqini qurmaq üçün kod yazmağa başladım.

Sprint-dən sonra sprint, hack-dan sonra hack, xüsusiyyətlər dəli tələsik quruldu. Qurmaq. Ölç. Öyrən. Zaman bazarı vacib idi və hər gün əhəmiyyət kəsb edirdi. Vaxt keçdi, hər 6 ayda 1 komanda üzvü nisbətində böyüyürdük və tətbiq milyon yükləmə işarəsini vurdu.

Tətbiqimizin Google Play mağaza yükləmələri və reytinqi.

Bu vaxta qədər, mənasız olmağı dayandırdı və bu, hətta bir şey olsa çoxsaylı kiracı müştəri oldu. İndi başladığımız zaman saatlarla davam edəcək xüsusiyyətlər günlər, bəzən həftələr çəkdi. Hər Fəaliyyət 1000+ sətir spagetti kodu idi, çünki Android təbii olaraq narahatlıqların ayrılması ilə çox maraqlanmır. Bir qarışıqlığa sahib olmağın ümumi dəyəri bizi xeyli yavaşlatdı.

Android Conundrum

Kod çirkin göründü, Fəaliyyət hər şeyi idarə etdi:

  • Dişləmə
  • I / O
  • Hesablama
  • Layihələr
  • Dəyişiklikləri konfiqurasiya edin
  • Nə deyil

Axı, fəaliyyətlər Nəzarətçilərdir, elə deyilmi? Yoxsa Görüşlər? Artıq bilmirdim.

MVC

Göydə Böyük Yeniləmə

Proqramı bir yerə dəyişməklə başqa bir yerdə bir şey sındırmayacaq şəkildə tərtib etməliyik. Bu proqramlar, əmi Bobun dediyi kimi, "möhkəm, sərt deyil, çevik, lakin kövrək deyil" olmalıdır.

Robert

Bu, mənim müəllimi və dostum Kəşif Razzaqui qarışıqlığı aradan qaldırmaq üçün komandaya qoşulduqda oldu. Möhtəşəm yenidən qurulması heç vaxt baş verməyib, amma cəhənnəmi kodumuzdan kənarlaşdırdıq:

  • Bir "xidmət" qatını əlavə etdik və bütün qeyri-UI kodları bir anda bir xidmət içərisinə köçürdük.
  • AsyncTasks-ı sındırdıq və Guava istifadə edərək dinlənilə bilən yerlərə köçdük.
  • OkHttp üçün AsyncHttpClient-i boşaltdıq.
  • Ancaq daha əhəmiyyətlisi, çox oxumağa başladıq: Təmiz Kod, Təmiz Memarlıq, SOLID, DRY, Praqmatik Proqramçı, Təcrübədə Java Uyğunluğu, Domain Sürətli Dizayn və s.

Tezliklə səylərimizin bəhrələrini görməyə başladıq. Məhsuldarlıq artdı, daha sürətli bir şey yazırdıq, hamı xoşbəxt idi.

Bu, tətbiqlərimizi birləşdirənə qədər və bütün cəhənnəmi itirənə qədər oldu. Əlavə bir xidmət qatına sahib olmaq onu kəsmədi.

Təmiz Kod Sənəti

Təmiz Memarlıqdakı əmi babanın videolarını dəfələrlə izlədikdən və Android tətbiq memarlığında çox şey oxuduqdan sonra MVP dizayn nümunəsi və RxJava ilə sınaqdan keçirmək qərarına gəldim.

Təcrübəyə bir neçə gün qaldıqdan sonra RxJava-ya keçmək və Təmiz Memarlıqdan istifadə edərək MVP həyata keçirmək qərarına gəldik. Bütün təbəqələri interfeyslər arxasına yığıb, narahatlıqları yaxşı ayırdıq.

  • Ümumiyyətlə bir fraqment tərəfindən həyata keçirilən Görünüşdə aparıcıya istinad var. Görünüşün edəcəyi yeganə şey, hər dəfə bir interfeys hərəkəti olduqda Təqdimatçıdan bir üsula zəng etməkdir.
  • Təqdimatçı View və Model arasında orta adam rolunu oynamağa cavabdehdir. Modeldən məlumat alır və formatı Görünüşə qaytarır. Tipik MVC-dən fərqli olaraq, View ilə qarşılıqlı münasibətdə nə baş verdiyinizi də qərar verir.
  • Model yalnız domen qatının və ya iş məntiqinin qapısıdır.
  • The Interactor I / O ilə məşğul olur və Görünüşdə göstəriləcək məlumatların təminatçısıdır.

İndi tamamilə yeni bir tətbiq ilə bir təbəqəni söndürmək daha asandır. Android tətbiqetməsinin inkişafının bir hissəsi və bir hissəsi olan UI-ni yenidən dizayn etmək daha asan oldu. İşlər nəhayət pozulmadan sürətli hərəkət edə bilər.

Oğlan Skaut Qaydası

Kodu yaxşı yazmaq kifayət deyil, zamanla kod təmiz olmalıdır. Həyat həqiqəti proqramın entropiyaya meylinin olmasıdır. Sadə bir oğlan kəşfiyyatçılarının qaydasını götürdüyümüz üçün vaxt keçdikcə kod çürüməsini və pozulduğunu gördük: "Düşərgəni tapdığınızdan daha təmiz buraxın."

Hamımız kodumuzu yoxladığımızdan biraz daha təmiz olsaydıq, kod sadəcə çürüyə bilməzdi. Təmizləmə böyük bir şey olmamalıdır. Bir dəyişən adınızı daha yaxşı üçün dəyişdirin, bir az çox böyük olan bir funksiyanı parçalayın, bir az kiçik təkrarlamanı aradan qaldırın, əgər bir kompozisiyanı təmizləyin.

Nəticə

Ölçülənən bir tətbiq qurma yolumuz "düzgün" olmaya bilər və bu yazı ilə razılaşmaya bilərsiniz. Axı, bütün döyüş sənətkarlarının heç biri ən yaxşı döyüş sənəti və ya birində olan ən yaxşı texnika haqqında razı deyil;)

MVP-yə qarşı bir çox fərqli yanaşma var və onu Android-ə uyğunlaşdırmaq üçün çox maraqlı həllər var. İnkar edə bilməyəcəyimiz bir həqiqət, Təmiz Kodun əhəmiyyət kəsb etməsi və yalnız bir xalçanın altından süpürə bilməyinizdir.

Bu yazı, əmi Bob Təmiz Kodundan çox borc alır və 2011-ci ildən Kəşifin Droidcon müzakirəsindən başlığı oğurlayır.

Təmiz Kod sizin üçün vacibdirsə, söhbət edək :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Bu yazını bəyənmisinizsə xahiş edirəm balaca ürəyə vurun! ❤