Nehezen megkeresett Android programozási élmények

Ez a bejegyzés, ahogy Kent Beck mondja a Végrehajtási minták című könyvében, „… egy meglehetősen törékeny feltevésen alapul, hogy a jó kód számít…”. De mindannyian tudjuk, hogy a tiszta kód fontos, mivel olyan sokáig kellett foglalkoznunk annak hiányával. És Kent is.

Kent Beck

A rendetlenség birtoklásának összes költsége

Néhány évvel ezelőtt, mint minden indiai Android-fejlesztő, aki indiai korai szakaszban indul, dolgozik, megpróbáltam „feltörni” a valós világ problémáit, „megzavarni az ipart” és „horgászni az univerzumban”. Annak érdekében, hogy a világon ne gondoljanak a jó szoftver-tervezésről vagy az architektúráról, elkezdtem kódot írni egy Android-alkalmazás létrehozásához, amely egy napon Indiában az egyik legnagyobb fogyasztói egészségvédő alkalmazás lesz.

Sprint sprint után, hack hack után, a funkciók őrült rohanás közben épültek fel. Épít. Intézkedés. Tanul. A piacra dobás fontos és minden nap számottevő. Az idő elhaladt, 6 havonta 1 csapattag növekedett, és az alkalmazás elérkezett a millió letöltéshez.

Alkalmazásunk Google Play Áruházának letöltése és besorolása.

Ekkorra az alkalmazás már nem volt triviális, és többszörös bérlő ügyfélgé vált, ha ez még egy dolog. Azoknak a funkcióknak, amelyek órákba telt, amikor elkezdtük, napokig, néha hetekig tartott. Minden tevékenység 1000+ sornyi spagetti kód volt, mivel az Android lényegében nem sokat aggódik az aggodalmak szétválasztása miatt. A rendetlenség teljes költsége jelentősen lelassította minket.

Az Android Conundrum

A kód csúnyanak tűnt, a tevékenységek mindent kezeltek:

  • Threading
  • I / O
  • számítási
  • elrendezések
  • Konfigurációs változások
  • Mi nem

Végül is a tevékenységek az ellenőrök, igaz? Vagy ezek nézetek? Nem tudtam már.

MVC

A nagy újratervezés az égen

Az alkalmazást oly módon kellett megterveznünk, hogy a kódsor megváltoztatása valahol ne törje el valamit máshol. Az alkalmazásnak, amint Bob bácsi mond, „robosztus, de nem merev, rugalmas, de nem törékeny” volt.

Robert „Bob bácsi” Martin

Ekkor mentorom és barátom, Kashif Razzaqui csatlakozott a csapathoz, hogy segítsen nekünk enyhíteni a rendetlenséget. A nagyszabású újratervezés soha nem történt meg, de a pokolból újrafogalmaztuk a kódunkat:

  • Hozzáadtunk egy „szolgáltatási” réteget, és az összes nem UI-kódot áthelyeztük őket, egyszerre egy szolgáltatást.
  • Az AsyncTasks-et kinyújtottuk és Guava segítségével költözöttünk a ListenableFutures-hez.
  • Az AsyncHttpClient programot az OkHttp-hez dobtuk.
  • De ami még fontosabb, sokat kezdtünk el olvasni: Tiszta Kód, Tiszta Építészet, SZOLID, SZÁR, A Pragmatikus Programozó, Java Párhuzamosság a gyakorlatban, Tartományvezérelt tervezés stb.

Hamarosan megkezdtük látni erőfeszítéseink előnyeit. Növekedett a termelékenység, gyorsabban írtunk dolgokat, mindenki boldog volt.

Addig, amíg nem egyesítettük alkalmazásunkat, és minden pokol elveszett. Csak egy további szolgáltatási réteg birtoklása nem vágta le.

A tiszta kód művészete

Miután Bob bácsi videóit a Tiszta Építészetről többször megnéztem, és sokat olvastam az Android alkalmazás architektúrájáról, úgy döntöttem, hogy kísérletezem az MVP tervezési mintával és az RxJava-val.

Néhány nappal a kísérlet után úgy döntöttünk, hogy átváltunk az RxJava-ra és megvalósítottuk az MVP-t a Clean Architecture segítségével. Gondoskodtunk arról, hogy az összes réteget beillesztettük az interfészek mögé, és jól elválasztottuk az aggodalmakat.

  • A Nézet, amelyet általában egy töredék hajt végre, hivatkozást tartalmaz az előadóra. A nézet csak az, hogy minden alkalommal felhív egy módszert a Műsorvezetőből, amikor egy interfészművelet történik.
  • A műsorvezető felelős középső emberként viselkedni a nézet és a modell között. Beolvassa az adatokat a modellből, és formázza a nézetbe. De a tipikus MVC-vel ellentétben az is eldönti, hogy mi történik, amikor a Nézettel lép kapcsolatba.
  • A modell csak a tartományréteg vagy üzleti logika átjárója.
  • Az Interactor az I / O-val foglalkozik, és szolgáltatja a nézetben megjelenítendő adatokat.

Most sokkal könnyebb váltani egy réteget egy teljesen új megvalósítással. A felhasználói felület átalakítása, amely az Android alkalmazásfejlesztés részét képezi, sokkal könnyebbé vált. A dolgok végre gyorsan mozoghatnak, törés nélkül.

A cserkész szabály

Nem elegendő a kód megfelelő írása, a kódot az idő múlásával tisztán kell tartani. Az élet ténye az, hogy a szoftverek hajlamosak entrópiára. Mindannyian láttuk a kód rothadását és az idő múlásával romlik, ezért kölcsön vettük az egyszerű cserkész fiúk szabályát: „Hagyja tisztább a táborhelyet, mint amennyit megtalálta.”

Ha valamennyien tisztább lett volna a kódunk, mint amikor ellenőriztük, akkor a kód egyszerűen nem tudott rothadni. A takarításnak nem kell valami nagynak lennie. Cserélje ki a változó nevét jobbra, szétszerelje egy kicsit túl nagy funkciót, szüntesse meg az apró másolatot, tisztítsa meg az összetett if kifejezést.

Következtetés

Lehet, hogy a méretezhető alkalmazás felépítésének módja nem megfelelő „, és valószínűleg nem ért egyet ezzel a hozzászólással. Végül is nem minden harcművész egyetért a legjobb harcművészettel vagy az egyik legjobb technikával;)

Sokféle megközelítés létezik az MVP felé, és sok érdekes megoldás van annak adaptálására az Android-hoz. Az egyik tény, amelyet nem tagadhatunk meg, az, hogy a Tiszta Kód számít, és egyszerűen nem tudod söpörni egy szőnyeg alatt.

Ez a bejegyzés nagymértékben kölcsönöz Bob bácsi tiszta kódjától, és ellopja a címet Kashif Droidcon beszédéből 2011-től.

Ha számodra fontos a tiszta kód, csevegjünk :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Ha tetszett ez a bejegyzés, kérjük, nyomja meg a kis szívet! ❤