Навучаныя ўражанні ад праграмавання Android

Гэты пост, як кажа Кент Бек у сваёй кнізе "Узоры рэалізацыі", "... заснаваны на даволі кволай перадумове, што добры код мае значэнне ...". Але ўсе мы ведаем, што чысты код мае значэнне, бо нам даводзілася сутыкацца з яго недахопам так доўга. І Кент робіць гэта.

Кент Бек

Агульная кошт валодання беспарадак

Некалькі гадоў таму, як і кожны наіўны распрацоўшчык Android, які працаваў у стадыі запуску на ранніх стадыях у Індыі, я паспрабаваў "ўзламаць" праблемы з рэальным светам, "сарваць галіну" і паставіць "ўвагнутасць ва Сусвеце". Не клапоцячыся пра свет добрага дызайну праграмнага забеспячэння або архітэктуры, я пачаў пісаць код, каб стварыць прыкладанне для Android, якое ў адзін цудоўны дзень стане адным з самых вялікіх спажывецкіх праграм па доглядзе ў Індыі.

Спрынт пасля спрынту, хак за хакам, функцыі былі пабудаваны ў шалёным парыве. Будаваць. Мера. Вучыцеся. Час на рынак быў важны і кожны дзень меў значэнне. Час праляцеў, мы раслі з разліку 1 члена каманды кожныя 6 месяцаў, і дадатак дасягнуў адзнакі ў мільён загрузак.

Загрузкі і рэйтынг крамы нашага прыкладання ў Google Play.

Да гэтага часу прыкладанне перастала быць трывіяльным, і яно стала кліентам з шматлікімі арандатарамі, калі гэта нават рэч. Функцыі, якія запатрабуюць гадзін, калі мы пачалі зараз, займалі дні, а часам і тыдні. Кожная дзейнасць складала 1000+ радкоў кода спагецці, бо Android па сваёй сутнасці не надта перажывае аб падзеле праблем. Агульныя выдаткі на ўладанне беспарадак значна знізілі нас.

Галаваломкі Android

Код выглядаў непрыгожа, дзейнасць кіравала ўсім:

  • Разьба
  • I / O
  • Вылічэнні
  • Макеты
  • Наладзьце змены
  • Чаго не

У рэшце рэшт, дзейнасць кантралёраў, так? Ці гэта погляды? Я больш не ведаў.

MVC

Вялікі рэдызайн у небе

Нам трэба было распрацаваць прыкладанне такім чынам, каб змяненне радка кода дзе-небудзь не зламала штосьці яшчэ. Дадатак павінен быць, як кажа дзядзька Боб, "надзейным, але не жорсткім, гнуткім, але не далікатным".

Роберт

Гэта быў момант, калі мой настаўнік і сябар Кашыф Раззакі далучыўся да каманды, каб дапамагчы нам палегчыць беспарадак. Грандыёзнага пераабсталявання ніколі не адбывалася, але мы перабудавалі свой чорт з нашага кода:

  • Мы дадалі "службовы" пласт і перамясцілі ўвесь не-карыстацкі інтэрфейс у іх, па адной службе.
  • Мы пагражалі AsyncTasks і перайшлі на ListenableFutures з дапамогай Guava.
  • Мы скінулі AsyncHttpClient для OkHttp.
  • Але што яшчэ важней, мы пачалі чытаць шмат: чысты код, чыстая архітэктура, SOLID, DRY, прагматычны праграміст, паралельнасць Java на практыцы, дызайн, кіраваны даменам і г.д.

Неўзабаве мы пачалі бачыць перавагі нашых намаганняў. Прадукцыйнасць павялічылася, мы пісалі рэчы хутчэй, усе былі шчаслівыя.

Гэта было да таго часу, пакуль мы не аб'ядналі нашы прыкладанні, і ўсё пекла не атрымалася. Проста наяўнасць дадатковага службовага ўзроўню не скараціла яго.

Мастацтва чыстага кодэксу

Пасля прагляду відэа дзядзькі Боба на Clean Architecture некалькі разоў і шмат прачытаных пра архітэктуру прыкладання Android, я вырашыў паэксперыментаваць з мадэллю дызайну MVP і RxJava.

Праз некалькі дзён у эксперыменце мы вырашылі перайсці на RxJava і ўкараніць MVP з дапамогай Clean Architecture. Мы пераканаліся, што мы інкапсулявалі ўсе пласты за інтэрфейсы і добра раздзялілі праблемы.

  • Выгляд, звычайна рэалізаваны фрагментам, змяшчае спасылку на вядучага. Адзінае, што зробіць погляд - гэта выклікаць метад з прэзентатара кожны раз, калі ўзнікае дзеянне інтэрфейсу.
  • Вядучы нясе адказнасць за тое, каб выступаць у ролі сярэдняга чалавека паміж View і Model. Ён атрымлівае дадзеныя з Мадэлі і вяртае іх адфарматаваны ў Выгляд. Але ў адрозненне ад тыповага MVC, ён таксама вырашае, што адбываецца пры ўзаемадзеянні з выглядам.
  • Мадэль - толькі шлюз даменнага ўзроўню або бізнес-логікі.
  • Інтэрактар ​​працуе з уводу-вываду і з'яўляецца пастаўшчыком дадзеных, якія будуць адлюстроўвацца ў выглядзе "Выгляд".

Цяпер значна прасцей адключыць адзін пласт з цалкам новай рэалізацыяй. Пераафармленне карыстацкага інтэрфейсу, які з'яўляецца часткай распрацоўкі прыкладанняў для Android, стала значна прасцей. Рэчы могуць, нарэшце, хутка рухацца без парушэння.

Правіла выведчыка

Недастаткова напісаць код, колькі часу трэба чысціць. Рэч у жыцці заключаецца ў тым, што праграмнае забеспячэнне мае тэндэнцыю да энтрапіі. Мы ўсе бачылі, як код згнівае і пагаршаецца з цягам часу, таму мы запазычылі простае правіла юнакоў-разведчыкаў: "Пакіньце лагерны лагер чысцей, чым вы яго знайшлі."

Калі мы ўсе зарэгістравалі наш код крыху чысцей, чым калі мы яго праверылі, код проста не мог згніць. Талака не павінна быць вялікай. Змяніце адно імя пераменнай да лепшага, развядзіце функцыю, якая занадта вялікая, выключыце адзін невялікі капіяванне, ачысціце адну кампазіцыю if.

Выснова

Наш спосаб стварэння маштабаванага прыкладання не можа быць "правільным", і вы можаце не пагадзіцца з гэтым паведамленнем. У рэшце рэшт, не ўсе артысты баявых мастацтваў згодныя з нагоды лепшага баявога мастацтва альбо лепшай тэхнікі ў адным;)

Існуе мноства розных падыходаў да MVP і шмат цікавых рашэнняў, каб адаптаваць яго да Android. Адзін факт, якога мы не можам абвергнуць, гэта тое, што Clean Code мае значэнне, і вы проста не можаце змясці яго пад дываном.

Гэты пост у значнай ступені запазычваецца ў "Чыстага кода дзядзькі Боба" і выкрадае загаловак з размовы аб Droidcon Кашыфа з 2011 года.

Калі чысты код мае значэнне для вас, давайце пагаварыць :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Калі вам спадабаўся гэты пост, калі ласка, стукніце маленькае сэрца! ❤