Erfiða reynslu af forritun Android

Þessi færsla, eins og Kent Beck segir í bók sinni Implementation Patterns, „er byggð á frekar brothættri forsendu um að góður kóði skipti máli…“. En við vitum öll að hreinn kóða skiptir máli þar sem við höfum þurft að takast svo lengi á við skort þess. Og það gerir Kent líka.

Kent Beck

Heildarkostnaður við að eiga sóðaskap

Fyrir nokkrum árum síðan, eins og allir barnalegir Android verktaki sem starfa við byrjun byrjunar á Indlandi, reyndi ég að „hakka“ vandamál í heiminum, „trufla iðnaðinn“ og setja „gabb í alheiminn“. Án umönnunar í heiminum varðandi góða hugbúnaðargerð eða byggingarlist byrjaði ég að skrifa kóða til að smíða Android app sem myndi einn daginn verða eitt stærsta neytendahjálparforritið á Indlandi.

Sprint eftir sprett, hakk eftir hakk, aðgerðir voru byggðar í vitlausu þjóta. Byggja. Mæla. Læra. Tími til markaðs var mikilvægur og hver dagur skipti máli. Tíminn leið, við fjölguðum á genginu 1 liðsmaður á 6 mánaða fresti og appið hafði slegið milljón niðurhalsmerki.

Niðurhal og einkunnagjöf af Google Play verslun appsins okkar.

Á þessum tíma var appið hætt að vera léttvægt og það var orðið fjölleigandi viðskiptavinur, ef það er jafnvel hlutur. Aðgerðir sem myndu taka tíma þegar við hófum núna tóku daga, stundum vikur. Sérhver virkni var 1000+ línur af spaghettí kóða þar sem Android hefur í eðli sínu ekki áhyggjur of mikið um aðskilnað áhyggjanna. Heildarkostnaður við að eiga sóðaskap hafði dregið verulega úr okkur.

Android Conundrum

Kóðinn leit ljótur út, Starfsemi stjórnaði öllu:

  • Þráður
  • I / O
  • Útreikningur
  • Skipulag
  • Stilla breytingar
  • Hvað ekki

Þegar öllu er á botninn hvolft eru athafnir stjórnendur, ekki satt? Eða eru það skoðanir? Ég vissi ekki meira.

MVC

Stóra endurhönnun á himni

Við þurftum að hanna forritið á þann hátt að það að breyta númeralínu einhvers staðar rofaði ekki eitthvað annað. Forritið varð að vera, eins og Bob frændi segir, „öflugt en ekki stíft, sveigjanlegt en ekki brothætt“.

Róbert „Bob frændi“ Martin

Þetta var þegar leiðbeinandi minn og vinur Kashif Razzaqui bættust í teymið til að hjálpa okkur við að draga úr óreiðunni. Stóru endurhönnunin gerðist aldrei, en við endurheimtum helvítis kóðann okkar:

  • Við bættum við „þjónustulaga“ og fluttum allan kóðann sem ekki er notaður í UI, eina þjónustu í einu.
  • Við töktuðum AsyncTasks og færðum okkur yfir í ListenableFutures með Guava.
  • Við sendum AsyncHttpClient fyrir OkHttp.
  • En það sem meira er að við fórum að lesa mikið: Clean Code, Clean Architecture, SOLID, DRY, The Pragmatic Programmer, Java Concurrency In Practice, Domain Driven Design, o.s.frv.

Brátt fórum við að sjá ávinninginn af viðleitni okkar. Framleiðni jókst, við vorum að skrifa hlutina hraðar, allir voru ánægðir.

Þetta var þar til við sameinuðum forritin okkar og allt helvíti tapaði. Bara að hafa viðbótarþjónustulag skoraði það ekki.

Listin að hreinum kóða

Eftir að hafa horft á myndbönd frænda Bobs um Clean Architecture margoft og lesið mikið um Android app arkitektúr ákvað ég að gera tilraunir með MVP hönnunarmynstrið og RxJava.

Nokkrum dögum eftir tilraunina ákváðum við að skipta yfir í RxJava og innleiða MVP með Clean Architecture. Við sáum til þess að við lokuðum öllum lögum á bak við tengi og aðgreindum áhyggjur vel.

  • Útsýnið, venjulega útfært af broti, inniheldur tilvísun til kynningarinnar. Það eina sem útsýnið mun gera er að hringja í aðferð frá kynniranum í hvert skipti sem um er að ræða viðmótsaðgerðir.
  • Kynnirinn er ábyrgur fyrir því að starfa sem meðalmaður milli View og Model. Það sækir gögn frá líkaninu og skilar þeim sniðnum yfir í útsýnið. En ólíkt dæmigerðum MVC ákveður það líka hvað gerist þegar þú hefur samskipti við Útsýnið.
  • Líkanið er aðeins hliðin á léninu eða viðskiptafræðinni.
  • Samspilinn fjallar um I / O og er sá sem veitir gögn sem birt verða í skjánum.

Núna er miklu auðveldara að skipta út einu lagi með alveg nýrri útfærslu. Að endurhanna HÍ, sem er hluti af þróun Android appsins, hefur orðið mun auðveldara. Hlutirnir geta loksins gengið hratt án þess að brjóta.

Regla drengaskáta

Það er ekki nóg að skrifa kóða vel, kóðinn verður að vera hreinn með tímanum. Staðreyndin í lífinu er sú að hugbúnaður hefur tilhneigingu til óreiðu. Við höfum öll séð númerin rotna og niðurbrjótast með tímanum svo við fengum lánaðu einfaldu skáta skátastjórnina: „Láttu tjaldsvæðið hreinna en þú fannst það.“

Ef við kíktum öll inn í kóðann okkar aðeins hreinni en þegar við kíktum á hann þá gæti kóðinn einfaldlega ekki rotnað. Hreinsunin þarf ekki að vera eitthvað stór. Breyta einum breytu til hins betra, sundraðu einni aðgerð sem er aðeins of stór, útrýma einum litlum tvíverknað, hreinsaðu upp einn samsettan ef fullyrðingu.

Niðurstaða

Leið okkar til að byggja upp stigstærð forrit gæti ekki verið „rétt“ og þú gætir ekki verið sammála þessari færslu. Þegar öllu er á botninn hvolft eru ekki allir bardagalistamenn sammála um bestu bardagaíþróttina, eða bestu tækni innan einnar;)

Það eru til margar mismunandi leiðir gagnvart MVP og mikið af áhugaverðum lausnum til að laga það að Android. Sú staðreynd að við getum ekki neitað er að Clean Code skiptir máli og þú getur bara ekki sópað þeim undir teppi.

Þessi færsla tekur mikið lán frá Hinn hreinu kóða frænda Bobs og stelur titlinum úr Droidcon-ræðu Kashifs frá 2011.

Ef Clean Code skiptir þig máli, við skulum spjalla :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Ef þér líkar vel við þessa færslu, vinsamlegast smelltu á litla hjartað! ❤