Zkušené zkušenosti s programováním pro Android

Tento příspěvek, jak říká Kent Beck ve své knize Implementační vzory, „… je založen na poměrně křehkém předpokladu, že na dobrém kódu záleží…“. Všichni však víme, že na čistém kódu záleží, protože jsme se tak dlouho museli vypořádat s jeho nedostatkem. A stejně tak i Kent.

Kent Beck

Celkové náklady na vlastnictví nepořádku

Před několika lety, stejně jako každý naivní vývojář Android, který pracuje v rané fázi spuštění v Indii, jsem se pokusil „zaseknout“ problémy skutečného světa, „narušit průmysl“ a „zasáhnout“ do vesmíru “. Bez péče o dobrý softwarový design nebo architekturu na světě jsem začal psát kód pro vytvoření aplikace pro Android, která by se jednoho dne stala jednou z největších spotřebitelských aplikací pro péči o zdraví v Indii.

Sprint po sprintu, hack po hacku, funkce byly postaveny v šíleném spěchu. Stavět. Opatření. Učit se. Čas na uvedení na trh byl důležitý a každý den na něm záleželo. Čas ubíhal, rostli jsme rychlostí 1 člena týmu každých 6 měsíců a aplikace dosáhla milionu stažení.

Stahování a hodnocení obchodu naší aplikace na Google Play.

Do této doby aplikace přestala být triviální a stala se klientem s více nájemci, pokud je to dokonce věc. Funkce, které by vyžadovaly hodiny, když jsme začali nyní trvat dny, někdy týdny. Každá aktivita měla více než 1 000 řádků špagetového kódu, protože Android se nedělá příliš starostí s oddělením obav. Celkové náklady na vlastnictví nepořádku nás výrazně zpomalily.

The Android Conundrum

Kód vypadal ošklivě, aktivity zvládly všechno:

  • Vlákno
  • I / O
  • Výpočet
  • Rozložení
  • Konfigurace změn
  • Co ne

Koneckonců, aktivity jsou kontroléry, že? Nebo jsou to názory? Už jsem to nevěděl.

MVC

Velký redesign na obloze

Potřebovali jsme navrhnout aplikaci takovým způsobem, aby změna řádku kódu někde nezničila něco jiného. Tato aplikace musela být, jak říká strýc Bob, „robustní, ale ne rigidní, flexibilní, ale ne křehký“.

Robert „Strýček Bob“ Martin

To bylo, když se můj tým a přítel Kashif Razzaqui připojili k týmu, aby nám pomohli zmírnit nepořádek. K velkému redesignu se nikdy nestalo, ale my jsme peklo z našeho kódu refactored:

  • Přidali jsme vrstvu služeb a přesunuli jsme do nich veškerý kód bez UI, jednu službu najednou.
  • Zasunuli jsme AsyncTasks a pomocí Guavy jsme se přestěhovali do ListenableFutures.
  • Vyhodili jsme AsyncHttpClient pro OkHttp.
  • Ale co je důležitější, hodně jsme začali číst: Čistý kód, Čistá architektura, SOLID, SUCHÉ, Pragmatický programátor, Java Concurrency in Practice, Design řízený doménou atd.

Brzy jsme začali vidět výhody našeho úsilí. Produktivita se zvýšila, psali jsme věci rychleji, všichni byli šťastní.

To bylo, dokud jsme sjednotili naše aplikace a všechno peklo se zlomilo. Jen mít další servisní vrstvu to neřeželo.

Umění čistého kódu

Poté, co jsem několikrát sledoval videa strýce Boba na architektuře Clean Architecture a hodně jsem četl na architektuře aplikací pro Android, jsem se rozhodl experimentovat s návrhovým vzorem MVP a RxJava.

Několik dní po experimentování jsme se rozhodli přejít na RxJava a implementovat MVP pomocí Clean Architecture. Ujistili jsme se, že jsme zapouzdřili všechny vrstvy za rozhraními a dobře oddělili obavy.

  • Pohled, obvykle implementovaný fragmentem, obsahuje odkaz na moderátora. Jediné, co pohled udělá, je volat metodu z Presenteru pokaždé, když dojde k akci rozhraní.
  • Přednášející je zodpovědný za to, že bude působit jako prostředník mezi pohledem a modelem. Načte data z modelu a vrátí je naformátovaná do zobrazení. Ale na rozdíl od typického MVC také rozhoduje, co se stane, když interagujete s pohledem.
  • Model je pouze bránou do doménové vrstvy nebo obchodní logiky.
  • Interaktor se zabývá I / O a je poskytovatelem dat, která se mají zobrazit v zobrazení.

Nyní je mnohem jednodušší přepnout jednu vrstvu pomocí zcela nové implementace. Přepracování uživatelského rozhraní, které je součástí vývoje aplikací pro Android, se stalo mnohem jednodušší. Věci se mohou konečně pohybovat rychle, aniž by se rozbily.

Pravidlo skautů

Nestačí psát kód dobře, kód musí být v průběhu času čistý. Skutečnost života je taková, že software má tendenci k entropii. Všichni jsme viděli hnilobu kódu a postupem času se zhoršovali, takže jsme si půjčili jednoduché pravidlo skautů: „Nechte tábor čistší, než jste ho našli.“

Pokud jsme všichni odhlásili náš kód trochu čistěji, než když jsme jej zkontrolovali, nemohl se kód jednoduše hnit. Vyčištění nemusí být něco velkého. Změňte jeden název proměnné k lepšímu, rozdělte jednu funkci, která je příliš velká, eliminujte jeden malý kousek duplikace, vyčistěte jeden složený příkaz if.

Závěr

Náš způsob vytváření škálovatelné aplikace nemusí být „správný“ a nemusíte s tímto příspěvkem souhlasit. Konec konců, ne všichni bojoví umělci se shodují na nejlepším bojovém umění nebo na nejlepší technice v jednom;)

Existuje mnoho různých přístupů k MVP a mnoho zajímavých řešení, jak je přizpůsobit Androidu. Jedinou skutečností, kterou nemůžeme popřít, je to, že na čistém kódu záleží a že jej prostě nemůžete zametat pod koberec.

Tento příspěvek si těžce půjčuje z Čistého kódu strýce Boba a ukradl titul z přednášky Kashif's Droidcon od roku 2011.

Pokud vám záleží na čistém kódu, pojďme chatovat :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Pokud se vám tento příspěvek líbil, zasáhněte prosím malé srdce! ❤