Hard-verdéngt Android Programméierungen Erfarungen

Dëse Post, wéi de Kent Beck a sengem Buch Implementation Muster seet, "… baséiert op enger zimlech fragiler Viraussetzung datt e gudde Code wichteg ass ...". Awer mir all wëssen datt propper Code zielt wéi mir eis sou laang mat hirem Mangel missen ëmbréngen. An och Kent.

Kent Beck

D'Gesamtkäschte fir e Mess ze hunn

Virun e puer Joer, wéi all naiv Android Entwéckler, deen an engem Ufank-Stuf-Startup an Indien geschafft huet, hunn ech probéiert echt Weltproblemer ze "hacken", d'Industrie ze stéieren an e "Dent am Universum ze setzen". Ouni Pfleeg an der Welt iwwer e gudde Softwaredesign oder Architektur, hunn ech ugefaang Code ze schreiwen fir eng Android App ze bauen déi enges Daags zu engem vun de gréisste Konsumentenheed-Pfleeg Apps an Indien géif ginn.

Sprint nom Sprint, hack nom Hack, Feature goufen an engem verréckten Rush gebaut. Bauen. Moossnam. Léiert. Zäit-um-Maart war wichteg an all Dag huet et wichteg. D'Zäit ass fortgaang, mir wuesse mat 1 Team Member fir all 6 Méint an d'App huet Millioune Downloads Mark getraff.

Eis App's Google Play Store Downloads a Bewäertung.

Vun dësem Zäitpunkt ass d'App opgehalen trivial ze sinn an et gouf e Multi-Locataire Client, wann dat souguer eng Saach ass. Features déi Stonnen daueren wann mer elo ugefaang hunn Deeg, heiansdo Wochen. All Aktivitéit war 1000+ Linnen Spaghettikode well Android iergendwou keng Suergen iwwer d'Trennung vun de Suerge mécht. D'Gesamtkäschte fir e Mess ze besëtzen haten eis vill bedeitend zougemaach.

Den Android Conundrum

De Code huet ugeschwat, Aktivitéiten hunn alles geréiert:

  • Threading
  • Ech / O
  • Berechnung
  • Layouten
  • Config Ännerungen
  • Wat net

No all Aktivitéite si Controller, richteg? Oder si se Meenungen? Ech wosst et net méi.

MVC

De Grand Redesign Am Himmel

Mir hunn d'App musse sou entworf ginn datt eng Zeil vun der Code iergendwou eppes net iergendwou géif briechen. D'App huet misse sinn, sou wéi de Monni Bob seet, "robust awer net steif, flexibel awer net fragil".

Robert

Dëst war wann mäi Mentor a Frënd Kashif Razzaqui der Equipe gestäerkt huet fir eis ze hëllefen de Chaos ze linderen. De Grousse Redesign ass ni geschitt, awer mir hunn d'Häll aus eisem Code refactoréiert:

  • Mir hunn e "Service" Layer bäigebaut an all den Net-UI Code an hinne geplënnert, ee Service gläichzäiteg.
  • Mir hunn d'AsyncTasks gehackt a mat Guava op ListableFutures geplënnert.
  • Mir hunn AsyncHttpClient fir OkHttp gedumpt.
  • Awer méi wichteg, hu mir vill ugefaang ze liesen: Clean Code, Clean Architecture, SOLID, DRY, The Pragmatic Programmer, Java Concurrency In Practice, Domain Driven Design, etc.

Geschwënn hu mer ugefaang d'Virdeeler vun eisen Efforten ze gesinn. D'Produktivitéit erhéicht, mir schreiwe Saachen méi séier, jidderee war frou.

Dëst war bis mir eis Apps vereenegt hunn an all d'Häll verluer huet. Just eng zousätzlech Serviceschicht huet et net geschnidden.

D'Konscht vu propperem Code

Nodeems ech de Monni Bob seng Videoen iwwer Clean Architecture e puer Mol gekuckt hunn a vill op der Android App Architektur gelies hunn, hunn ech decidéiert mam MVP Design Muster an RxJava ze experimentéieren.

E puer Deeg an d'Experimenterung hu mir decidéiert op RxJava ze wiesselen an MVP mat Clean Architecture ëmzesetzen. Mir hunn séchergestallt datt mir all Schichten hannert Schnëttplazen verschlësselte a sech Suerge gutt getrennt hunn.

  • De View, normalerweis ëmgesat vun engem Fragment, enthält eng Referenz zum Presentateur. Dat eenzegt wat d'Vue mécht ass eng Method aus dem Presentateur ze ruffen all Kéier wann et eng Interfaceaktioun gëtt.
  • De Presentateur ass verantwortlech fir als mëttlere Mann tëscht View a Model ze handelen. Et retrieves Daten vum Model a bréngt se zréck an d'Format geformt. Awer am Géigesaz zum typesche MVC, entscheet et och wat geschitt wann Dir mat der View interagéiert.
  • De Model ass nëmmen de Paart vun der Domain Schicht oder der Geschäftslogik.
  • Den Interactor beschäftegt mat I / O an ass de Provider vun Daten déi an der View ugewise ginn.

Elo ass et vill méi einfach eng Schicht mat enger ganz neier Ëmsetzung auszeschalten. Den UI nei designen, en Deel a Pak vun der Android App Entwécklung, ass vill méi einfach ginn. D'Saache kënnen endlech séier réckelen ouni ze briechen.

De Jong Scout Reegel

Et ass net genuch Code gutt ze schreiwen, de Code muss iwwer Zäit propper gehale ginn. De Fakt vum Liewen ass datt Software eng Tendenz fir Entropie huet. Mir hunn all Code verrot an degradéiere mat der Zäit, sou datt mir déi einfach Jong Scoutsregel geléint hunn: "Loosst de Camping méi propper wéi Dir et fonnt hutt."

Wa mir all eise Code e bësse méi propper kontrolléieren wéi wa mir en erauschecken, konnt de Code einfach net verrotten. D'Geschäft muss net eppes grouss sinn. E Variabelen Numm ännert fir de Besseren, eng Funktioun opbriechen déi e bëssen ze grouss ass, eliminéiert eng kleng Duplizéierung, botzt e Composite wann Ausso.

Konklusioun

Eise Wee fir eng skalierbar App opzebauen ass vläicht net "korrekt" an Dir sidd vläicht net mat dësem Post averstanen. No allem sinn net all Kampfsportler d'accord iwwer déi bescht Kampfsport, oder déi bescht Technik bannent engem;)

Et gi vill verschidde Approche fir MVP a vill interessant Léisungen fir et op Android unzepassen. Dee Fakt dee mir net verleegnen ass datt de Clean Code ass wichteg an Dir kënnt et einfach net ënner engem Teppech ausfëllen.

Dëse Post léint haart vum Monni Bob sengem Clean Code a klaut den Tittel aus dem Kashif säin Droidcon Diskussioun aus dem Joer 2011.

Wann de Clean Code Iech wichteg ass, loosst eis chatten :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Wann Dir dëse Post gär hätt, schéckt w.e.g. dat klengt Häerz! ❤