Կոշտ վաստակած Android ծրագրավորման փորձեր

Այս գրառումը, ինչպես ասում է Քենթ Բեկը իր «Իրականացման օրինաչափություններ» գրքում, «… հիմնված է բավականին փխրուն ենթադրության վրա, որ լավ օրենսգիրքը կարևոր է…»: Բայց մենք բոլորս գիտենք, որ մաքուր ծածկագիրը կարևոր է, քանի որ երկար ժամանակ գործ ունեինք դրա բացակայության հետ: Եվ այդպես էլ անում է Քենթը:

Քենթ Բեկ

Խառնաշփոթ ունենալու ընդհանուր արժեքը

Մի քանի տարի առաջ, ինչպես յուրաքանչյուր միամիտ Android մշակող, որն աշխատում էր Հնդկաստանում վաղ փուլում սկսվելիս, ես փորձեցի «թալանել» իրական աշխարհի խնդիրները, «խաթարել արդյունաբերությունը» և «տիեզերք դնել» տիեզերքում: Առանց խնամքի աշխարհում լավ ծրագրային ապահովման ձևավորման կամ ճարտարապետության մասին, ես սկսեցի գրել կոդ ՝ ստեղծելու Android հավելված, որը մի օր կդառնար Հնդկաստանի սպառողների առողջության խնամքի ամենամեծ ծրագրերից մեկը:

Sprint- ը sprint- ից հետո, hack- ը հաքից հետո, առանձնահատկությունները կառուցված էին խելագար շտապի մեջ: Կառուցել: Չափել Իմացեք Ժամանակ առ շուկան կարևոր էր և ամեն օր կարևոր էր: Ժամանակը թռավ, մենք 6 ամսվա ընթացքում աճում էինք 1 թիմի անդամի չափով, և հավելվածը հասել էր միլիոն ներլցման նշանի:

Մեր ծրագրի Google Play խանութի ներլցումներն ու վարկանիշը:

Մինչ այս պահը ծրագիրը դադարել էր չնչին լինել, և այն դարձել էր բազմահարկ վարձակալ հաճախորդ, եթե դա նույնիսկ մի բան է: Առանձնահատկություններ, որոնք կտային ժամեր, երբ մենք սկսեցինք այժմ տևում օրեր, երբեմն շաբաթներ: Յուրաքանչյուր Ակտիվություն սպագետտի կոդի 1000+ տող էր, քանի որ Android- ն իրոք բնավ չի անհանգստացնում մտահոգությունների առանձնացման մասին: Խառնաշփոթ ունենալու ընդհանուր արժեքը մեզ զգալիորեն դանդաղեցրեց:

Android Conundrum- ը

Կոդը տգեղ տեսք ուներ, Գործողությունները կառավարեցին ամեն ինչ.

  • Թելը
  • I / O
  • Հաշվարկ
  • Դասավորությունը
  • Կարգավորել փոփոխությունները
  • Ինչը չէ

Ի վերջո, գործողությունները վերահսկողներն են, այդպես չէ՞: Թե՞ տեսակետներ են: Այլևս չգիտեի:

MVC

Մեծ վերափոխում Երկնքում

Մեզ պետք էր ծրագիր մշակել այնպես, որ ինչ-որ տեղ ծածկագիր գիծ փոխելը որևէ այլ տեղ չխախտի: Հավելվածը պետք է լիներ, ինչպես ասում է քեռի Բոբը, «ուժեղ, բայց ոչ կոշտ, ճկուն, բայց ոչ փխրուն»:

Ռոբերտ «Քեռի Բոբ» Մարտին

Սա այն ժամանակ էր, երբ իմ դաստիարակն ու ընկեր Քաշիֆ Ռազզաուկին միացան թիմին ՝ օգնելու մեզ մեղմել խառնաշփոթը: Մեծ վերափոխումը երբեք տեղի չի ունեցել, բայց մենք վերափոխեցինք դժոխքը մեր կոդից.

  • Մենք ավելացրեցինք «ծառայության» շերտ և տեղափոխեցինք բոլոր ոչ UI կոդերը դրանց մեջ, մեկ ծառայություն միանգամից:
  • Մենք խեղդեցինք AsyncTasks- ին և տեղափոխվեցինք Guable- ի լսելի Futures:
  • Մենք նետեցինք AsyncHttpClient- ը OkHttp- ի համար:
  • Բայց ավելի կարևոր է, որ մենք շատ բան սկսեցինք կարդալ `Մաքուր կոդ, մաքուր ճարտարապետություն, SOLID, DRY, The Pragmatic Programmer, Java Concurrency In Practice, Domain Driven Design և այլն:

Շուտով մենք սկսեցինք տեսնել մեր ջանքերի օգուտները: Արտադրողականությունն աճում էր, մենք բաներն ավելի արագ էինք գրում, բոլորը ուրախ էին:

Դա տեղի ունեցավ այնքան ժամանակ, մինչև մենք միավորեցինք մեր ծրագրերը և բոլոր դժոխքները կոտրվեցին: Պարզապես սպասարկման լրացուցիչ շերտ ունենալը դա չկտրեց:

Մաքուր օրենսգրքի արվեստը

Քեռի Բոբի «Մաքուր ճարտարապետություն» ֆիլմին բազմիցս դիտելուց և Android հավելվածի ճարտարապետության վրա շատ բան կարդալուց հետո, ես որոշեցի փորձեր կատարել MVP նախագծման ձևի և RxJava- ի հետ:

Փորձարկումից մի քանի օր անց մենք որոշեցինք անցնել RxJava և իրականացնել MVP ՝ օգտագործելով Clean Architecture: Մենք համոզվեցինք, որ բոլոր շերտերը ծածկել ենք միջերեսների հետևում և լավ ենք առանձնացրել մտահոգությունները:

  • Դիտումը, որը սովորաբար իրականացվում է Հատվածի կողմից, հղում է պարունակում հաղորդավարին: Միակ բանը, որ տեսքը կկատարի `Ներկայացնողից մի մեթոդ կանչելն ամեն անգամ, երբ կա ինտերֆեյսի գործողություն:
  • Ներկայացնողը պատասխանատու է հանդես գալ որպես Դիտարանի և Մոդելի միջև միջին մարդ: Այն առբերում է տվյալները Մոդելից և այն վերադարձնում է ձևաչափված View: Բայց ի տարբերություն բնորոշ MVC- ի, այն նաև որոշում է, թե ինչ է տեղի ունենում View- ի հետ շփվելիս:
  • Մոդելը միայն դոմեյնային շերտի կամ բիզնես տրամաբանության դարպաս է:
  • Interactor- ը գործ ունի I / O- ի հետ և հանդիսանում է View- ում ցուցադրվող տվյալների մատակարարը:

Այժմ շատ ավելի հեշտ է մեկ շերտը ամբողջովին նոր իրականացնելու միջոցով: UI- ի վերափոխումը `Android հավելվածների մշակման մի մասը և փաթեթը, դարձել է շատ ավելի հեշտ: Վերջապես, իրերը կարող են արագ շարժվել ՝ առանց կոտրելու:

Տղաների սկաուտների կանոն

Կոդ լավ գրելն էլ բավարար չէ, ծածկագիրը ժամանակի ընթացքում պետք է մաքուր պահվի: Կյանքի փաստն այն է, որ ծրագրաշարը միտում ունի էնդոպիայի: Մենք բոլորս տեսել ենք, որ կոդերը փչանում և քայքայում են ժամանակի ընթացքում, ուստի վերցրել ենք տղաների պարզ սկաուտների կանոնը. «Թողեք ճամբարից մաքուր, քան գտնեցիք»:

Եթե ​​մենք բոլորս ստուգեցինք մեր ծածկագիրը մի փոքր ավելի մաքուր, քան երբ մենք ստուգեցինք այն, ապա ծածկագիրը պարզապես չէր կարող փչել: Մաքրումը պարտադիր չէ ինչ-որ մեծ բան լինել: Փոխեք մեկ փոփոխական անուն ՝ ավելի լավի համար, կազմեք մի գործառույթ, որը մի փոքր չափազանց մեծ է, վերացրեք մեկ կրկնակի կրկնօրինակումը, հայտարարության դեպքում մաքրեք մեկ բաղադրիչ:

Եզրակացություն

Կշեռքային ծրագիր ստեղծելու մեր եղանակը կարող է «ճիշտ» լինել, և գուցե չհամաձայնվեք այս հաղորդագրության հետ: Ի վերջո, ոչ բոլոր մարտարվեստագետները համաձայն չեն լավագույն մարտարվեստի կամ մեկի լավագույն փորձի մասին;)

Կան բազմաթիվ տարբեր մոտեցումներ MVP- ի նկատմամբ և շատ հետաքրքիր լուծումներ `այն Android- ին հարմարեցնելու համար: Մի փաստ, որ մենք չենք կարող հերքել, այն է, որ Մաքուր օրենսգիրքը կարևոր է, և դուք պարզապես չեք կարող այն քողարկել գորգերի տակ:

Այս գրառումը մեծապես փոխառություններ է վերցնում Քեռի Բոբի Մաքուր օրենսգրքից և վերնագիրն է հափշտակում Քաշիֆի Դրոդոնկոնյան ելույթից 2011 թվականից:

Եթե ​​Մաքուր օրենսգիրքը ձեզ համար կարևոր է, եկեք զրուցենք :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Եթե ​​Ձեզ դուր է եկել այս գրառումը, խնդրում ենք հարվածել փոքրիկ սրտին: ❤