Mga Karanasang Programa na Programming ng Hard-Kumita

Ang post na ito, tulad ng sinabi ni Kent Beck sa kanyang librong Implementation Pattern, "... ay batay sa isang medyo marupok na premise na ang mabuting code ay mahalaga ...". Ngunit alam nating lahat na ang mga malinis na code ay mahalaga sa matagal na nating pakikitungo sa kakulangan nito. At ganoon din si Kent.

Kent Beck

Ang Kabuuang Gastos ng Pag-aari ng isang Mensahe

Ilang taon na ang nakalilipas, tulad ng bawat walang muwang na developer ng Android na nagtatrabaho sa isang maagang yugto sa pagsugod sa India, sinubukan kong "hack" ang tunay na mga problema sa mundo, upang "guluhin ang industriya" at maglagay ng "pustiso sa uniberso". Nang walang pag-aalaga sa mundo tungkol sa mahusay na disenyo ng software o arkitektura, sinimulan ko ang pagsulat ng code upang makabuo ng isang Android app na isang araw ay magiging isa sa mga pinakamalaking apps ng pangangalaga sa pangangalaga ng heath sa India.

Ang sprint pagkatapos ng sprint, hack pagkatapos ng hack, ang mga tampok ay itinayo sa isang sobrang galit na loob. Bumuo. Sukatin. Alamin. Mahalaga ang time-to-market at ang bawat araw ay mahalaga. Lumipad ang oras, lumalaki kami sa rate ng 1 miyembro ng koponan tuwing 6 na buwan at ang app ay tumama sa milyong marka ng pag-download.

Mga pag-download at rating ng Google Play ng aming app.

Sa oras na ito, ang app ay tumigil sa pagiging walang saysay at ito ay naging isang multi-nangungupahan client, kung iyon ay kahit na isang bagay. Ang mga tampok na tatagal ng oras kapag nagsimula kami ngayon ay tumagal ng mga araw, minsan linggo. Ang bawat Aktibidad ay 1000+ na linya ng spaghetti code bilang Android na likas na hindi masyadong nag-aalala tungkol sa paghihiwalay ng mga alalahanin. Ang kabuuang halaga ng pagmamay-ari ng gulo ay makabuluhang nagpapabagal sa amin.

Ang Android Conundrum

Ang code ay tumingin pangit, Pinamamahalaan ng mga Aktibidad ang lahat:

  • Threading
  • Ako / O
  • Kumpetisyon
  • Mga layout
  • I-configure ang mga pagbabago
  • Ano ang hindi

Pagkatapos ng lahat, ang Mga Aktibidad ay Mga Controller, di ba? O May mga Pananaw ba sila? Hindi ko na alam.

MVC

Ang Grand Redesign Sa Langit

Kailangan naming idisenyo ang app sa isang paraan na ang pagbabago ng isang linya ng code sa ibang lugar ay hindi nakabasag ng ibang bagay sa ibang lugar. Ang app ay dapat na, tulad ng sinabi ni Uncle Bob, "matatag ngunit hindi mahigpit, nababaluktot ngunit hindi marupok".

Robert

Ito ay nang sumali ang aking tagapagturo at kaibigan na si Kashif Razzaqui sa koponan upang matulungan kaming mapawi ang gulo. Hindi naganap ang engrandeng muling pagdisenyo, ngunit refact namin ang impiyerno sa labas ng aming code:

  • Nagdagdag kami ng isang "serbisyo" layer at inilipat ang lahat ng mga di-UI code sa kanila, isang serbisyo nang sabay-sabay.
  • Kami chucked AsyncTasks at lumipat sa Makinig naFutures gamit ang Guava.
  • Itinapon namin ang AsyncHttpClient para sa OkHttp.
  • Ngunit mas mahalaga, nagsimula kaming magbasa ng maraming: Malinis na Code, Malinis na Arkitektura, SOLID, DRY, The Pragmatic Programmer, Java Concurrency In Practise, Domain Driven Design, atbp.

Di-nagtagal ay sinimulan naming makita ang mga pakinabang ng aming mga pagsisikap. Tumaas ang pagiging produktibo, mas mabilis kaming sumulat ng mga bagay, masaya ang lahat.

Ito ay hanggang sa pinag-isa namin ang aming mga apps at nawala ang lahat ng impiyerno. Ang pagkakaroon lamang ng isang karagdagang layer ng serbisyo ay hindi pinutol.

Ang Sining ng Malinis na Code

Matapos mapanood ang mga video ni Uncle Bob sa Malinis na Arkitektura nang maraming beses at magbasa nang maraming sa arkitektura ng Android app, nagpasya akong mag-eksperimento sa pattern ng disenyo ng MVP at RxJava.

Ilang araw sa eksperimento, nagpasya kaming lumipat sa RxJava at ipatupad ang MVP gamit ang Clean Architecture. Tiniyak namin na pinagsama namin ang lahat ng mga layer sa likod ng mga interface at maayos na pinaghiwalay ang mga alalahanin.

  • Ang View, na karaniwang ipinapatupad ng isang Fragment, ay naglalaman ng isang sanggunian sa nagtatanghal. Ang tanging bagay na gagawin ng view ay ang tumawag ng isang pamamaraan mula sa Presenter tuwing may pagkilos ng interface.
  • Ang Tagapangasiwa ay responsable na kumilos bilang gitnang tao sa pagitan ng View at Model. Kinukuha nito ang data mula sa Model at ibabalik ang format na ito sa View. Ngunit hindi katulad ng karaniwang MVC, napapasya din nito kung ano ang mangyayari kapag nakikipag-ugnayan ka sa View.
  • Ang Model ay lamang ang gateway sa layer ng domain o logic ng negosyo.
  • Nakikipag-ugnay ang Interactor sa I / O at ang tagapagbigay ng data na ipapakita sa View.

Ngayon ay mas madali upang i-out ang isang layer na may isang ganap na bagong pagpapatupad. Ang muling pagdidisenyo ng UI, isang bahagi at bahagi ng pag-unlad ng Android app, ay naging mas madali. Ang mga bagay ay maaaring lumipat nang mabilis nang hindi masira.

Ang Batas ng Batang Scout

Hindi sapat na isulat ang code nang maayos, dapat na mapanatiling malinis ang code sa paglipas ng panahon. Ang katotohanan ng buhay ay ang software na iyon ay may pagkahilig sa entropy. Nakita namin lahat ng code na nabulok at nanghina sa paglipas ng panahon kaya hiniram namin ang simpleng tuntunin ng mga tagasubaybay ng batang lalaki: "Iwanan ang mas malinis na lugar kaysa sa natagpuan mo ito."

Kung lahat kami naka-check-sa aming code ng isang maliit na mas malinis kaysa sa kapag sinuri namin ito, ang code ay hindi maaaring mabulok. Ang paglilinis ay hindi kailangang maging isang bagay na malaki. Baguhin ang isang variable na pangalan para sa mas mahusay, masira ang isang function na medyo malaki, alisin ang isang maliit na pagkopya, linisin ang isang composite kung pahayag.

Konklusyon

Ang aming paraan ng pagbuo ng isang nasusukat na app ay maaaring hindi "tama" at maaaring hindi ka sang-ayon sa post na ito. Pagkatapos ng lahat, hindi lahat ng martial artist ay sumasang-ayon tungkol sa pinakamahusay na martial art, o ang pinakamahusay na pamamaraan sa loob ng isa;)

Maraming iba't ibang mga diskarte patungo sa MVP at maraming mga kagiliw-giliw na solusyon upang maiangkop ito sa Android. Ang isang katotohanang hindi natin maitatanggi na ang Malinis na Code ay mahalaga at hindi mo lamang mai-sweep ito sa ilalim ng isang alpombra.

Ang post na ito ay humihiram nang labis mula sa Malinis na Code ng Uncle Bob at nagnanakaw ng pamagat mula sa Kashif's Droidcon talk mula 2011.

Kung mahalaga sa iyo ang Code ng Linis, makipag-chat tayo :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Kung nagustuhan mo ang post na ito, mangyaring pindutin ang maliit na puso! ❤