Android бағдарламалаудың қиын нұсқалары

Кент Бек өзінің «Іске асыру заңдылықтары» кітабында былай деп жазды: «... бұл өте жақсы кодтың маңызды екендігіне негізделген ...». Таза кодтың маңыздылығын, оның жетіспеушілігімен ұзақ уақыт бойы күресуге тура келетінін бәріміз білеміз. Кент те солай етеді.

Кент Бек

Хабарламаны иемденудің жалпы құны

Бірнеше жыл бұрын, Үндістанда бастапқы сатысында жұмыс істейтін Android-тің кез-келген қарапайым, жасаушысы сияқты, мен нақты әлем мәселелерін «бұзуға», «индустрияны бұзуға» және «ғаламға майыспауға» тырыстым. Әлемде жақсы бағдарламалық жасақтама немесе архитектура туралы ойламастан, мен бір күн Үндістандағы ең үлкен тұтынушылардың бірі болатын Android қосымшасын құру үшін код жаза бастадым.

Спринттен кейінгі спринт, бұзылғаннан кейін бұзу, функциялар ақылға сыймайтындай етіп салынған. Құру. Өлшеу. Біл. Базарға уақыт өте маңызды болды және күн сайын маңызды болды. Уақыт өтіп кетті, біз әр 6 айда бір команда мүшесінің санына өсіп отырдық және қолданба миллион жүктеу көрсеткішіне жетті.

Біздің Google Play дүкеніндегі жүктеулер мен рейтинг.

Осы уақытқа дейін қолданба қарапайым болмай қалды және ол көп клиентті клиентке айналды, егер бұл тіпті болса. Біз бастаған кезде бірнеше сағатты қажет ететін ерекшеліктер бірнеше күн, кейде бірнеше аптаға созылатын. Әрбір әрекет спагетти кодының 1000 жолынан тұрады, өйткені Android алаңдаушылықты бөлу туралы көп ойланбайды. Бесікке ие болудың жалпы құны бізді айтарлықтай бәсеңдеткен еді.

Android Conundrum

Код жаман көрінді, Әрекеттер бәрін басқарды:

  • Жіп
  • I / O
  • Есептеу
  • Орналасулар
  • Өзгерістерді конфигурациялау
  • Не жоқ

Әрекеттер - бұл контроллерлер, иә? Немесе олар Көрулер ме? Мен енді білмедім.

MVC

Аспанда Үлкен дизайн

Біз қосымшаны кодтың жолын басқа жерде өзгерту кез-келген жерде бұзбайтын етіп жасауымыз керек еді. Бұл қосымшаны Боб ағамыз айтқандай, «мықты, қатал емес, икемді, бірақ нәзік емес» болу керек.

Роберт «Боб ағасы» Мартин

Бұл менің тәлімгерім және досым Кашиф Раззақуи командаға қосылып, қиындықты жеңілдетуге көмектесті. Үлкен қайта құру ешқашан болған емес, бірақ біз кодты жоққа шығардық:

  • Біз «қызмет» қабатын қосып, UI емес кодтардың барлығын бір уақытта бір қызметке енгіздік.
  • Біз AsyncTasks-ты қыстырып, Гуаваны қолдана отырып, ListenableFutures-ке көштік.
  • OkHttp үшін AsyncHttpClient-ті тастадық.
  • Ең бастысы, біз көп оқыдық: Таза код, Таза архитектура, SOLID, DRY, Прагматикалық бағдарламашы, Java-дағы тәжірибе, доменмен басқарылатын дизайн және т.б.

Көп ұзамай біз өз күшіміздің нәтижесін көре бастадық. Өнімділік өсті, біз тезірек заттарды жаздық, барлығы қуанды.

Бұл біздің қосымшаларымызды біріктіріп, тозақтың бәрі жоғалғанша болды. Тек қосымша қызмет көрсету қабаты болса, оны кескен жоқ.

Таза кодекс өнері

Таза архитектурадағы Боб ағаның бейнелерін бірнеше рет көргеннен кейін және Android қосымшасының архитектурасы туралы көп оқығаннан кейін мен MVP және RxJava дизайнымен тәжірибе жасауды ұйғардым.

Тәжірибеге бірнеше күн салып, біз RxJava-ға ауысып, Таза архитектураны қолдана отырып, MVP-ны жүзеге асыруды шештік. Біз интерфейстердің артындағы барлық қабаттарды инкапсуляциялағанымызды және алаңдаушылықтарды жақсы ажыраттық.

  • Әдетте фрагментпен іске асырылатын Көрініс баяндамашыға сілтемені қамтиды. Көрініс жасай алатын жалғыз нәрсе - интерфейс әрекеті болған сайын баяндамашыдан әдіс шақыру.
  • Баяндамашы View және Model арасындағы ортаңғы адам ретінде әрекет етуге жауапты. Ол модельден деректерді шығарады және оны пішімдеуді Көрініске қайтарады. Кәдімгі MVC-тен айырмашылығы, ол View-пен әрекеттескенде не болатынын шешеді.
  • Модель - бұл тек домен қабатының немесе бизнес логикасының шлюзі.
  • Интерактив енгізу / шығару қызметімен айналысады және Көріністе көрсетілетін деректерді жеткізуші болып табылады.

Енді бір қабатты мүлдем жаңа енгізумен ауыстыру әлдеқайда оңай. UI интерфейсін, Android қосымшасын әзірлеудің бөлігі және бөлігі ретінде қайта құру әлдеқайда жеңіл болды. Заттар бұзылмай тез қозғалады.

Бала скаут ережесі

Кодты жақсы жазу жеткіліксіз, уақыт өте келе кодты таза ұстау керек. Бағдарламалық жасақтаманың энтропияға бейімділігі өмірдің фактісі болып табылады. Уақыт өте келе біз кодтың бүлінуін және нашарлауын көрдік, сондықтан қарапайым скауттардың: «Лагерьді тапқаннан тазартып қойыңыз» деген ережені алдық.

Егер біздің барлығымыз тексергеннен гөрі біздің кодты сәл тазартқан болсақ, онда код шіріп кете алмады. Тазарту үлкен нәрсе болмауы керек. Бір айнымалы атауды жақсырақ етіп өзгертіңіз, шамадан тыс үлкен функцияны бөліп алыңыз, кішкене қайталануды болдырмаңыз, егер құрама болса, бір құрама жинақты тазалаңыз.

Қорытынды

Кеңейтілетін қолданбаны құру тәсіліміз «дұрыс» болмауы мүмкін және сіз бұл қызметпен келіспеуіңіз мүмкін. Жауынгерлердің бәрі бірдей ең жақсы жекпе-жек өнері туралы немесе бір техникадағы ең жақсы техника туралы келісе бермейді;)

MVP-ге қатысты әртүрлі тәсілдер және оны Android-ке бейімдеу үшін көптеген қызықты шешімдер бар. Таза Кодтың маңызды екендігі және сіз оны кілемнің астында сыпыра алмайсыз.

Бұл лауазым Боб ағасының Таза кодексінен көп қарыз алады және 2011 жылдан бастап Кашифтің Droidcon әңгімесіндегі тақырыпты ұрлайды.

Егер Таза Код сізге маңызды болса, сөйлесейік :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Егер сіз бұл постты ұнатсаңыз, кішкентай жүрекке соққы беріңіз! ❤