Талыкпай иштеп жаткан Android программалоо тажрыйбалары

Кент Бек өзүнүн "Ишке ашыруу үлгүлөрү" аттуу китебинде айткандай, "... жакшы коддун мааниси өтө назик экенине негизделген ...". Бирок, таза коддордун жоктугунан улам бир топ убакыттан бери күрөшүп келе жатабыз. Кент да ошондой кылат.

Кент Бек

Кабарга ээ болуунун жалпы баасы

Бир нече жыл мурун, Индияда эртерээк иштеп баштаганда, Android'дин ар бир тажрыйбалуу иштеп чыгуучусу сыяктуу, мен чыныгы дүйнөлүк көйгөйлөрдү "ачууга", "тармакты бузууга" жана "ааламга майысып" салууга аракет кылдым. Дүйнө жүзүндө жакшы программалык дизайн же архитектура жөнүндө кам көрбөй туруп, бир күндө Индиядагы эң ири керектөөчү колдонмо болуп калуучу Android колдонмосун түзө баштадым.

Спринттен кийин, спринттен кийин бузулгандан кийин, спектрин өзгөчөлүктөрү акылга сыйбастан курулган. Build. Өлчөө. Үйрөнүү. Базарга убакыттын өтүшү маанилүү жана күн сайын маанилүү болгон. Убакыт өткөн сайын, биз 6 ай сайын 1 команданын мүчөсү катары өсүп жатабыз жана колдонмо миллион жүктөө белгисине жеткен.

Биздин колдонмонун Google Play дүкөнүндөгү жүктөмөлөр жана баалоо.

Ушул убакка чейин, колдонмо анча-мынча иштебей калды жана ал көп батирлүү кардар болуп калды, эгерде бул бир нерсе болсо. Азыр башталганыбызда бир нече саат талап кылынган өзгөчөлүктөр бир нече жума, кээде жумаларга созулат. Ар бир аракет 1000+ сап спагетти кодун түздү, анткени Android өз ара бөлүнүп-жарылууга көп деле маани бербейт. Башаламандыкка ээ болуунун жалпы баасы бизди кыйла жайлатты.

Android Конундрум

Код жаман көрүнгөн, Иш-аракеттер бардыгын башкарган:

  • Threading
  • I / O
  • эсептөө
  • Layouts
  • Өзгөртүүлөрдү конфигурациялоо
  • Эмнеге болбосун

Акыр-аягы, иш-аракеттер контроллерлор болуп саналат, туурабы? Же алар Көрүүлөрбү? Мындан ары билбедим.

MVC

Асмандагы Улуу Кайра жасоо

Колдонмону коддун тилкесин башка жерде өзгөртүү башка бир нерсени бузбай турган кылып жасашыбыз керек. Колдонмо Боб байкемдин айтканы боюнча, "бекем, бирок катаал эмес, ийкемдүү, бирок морт эмес".

Роберт

Менин устатым жана досум Кашиф Раззакуи командага кошулуп, баш аламандыкты жеңилдетүүгө жардам берген. Эң сонун жасалгалоо эч качан болгон эмес, бирок биз кодду бузуп тозокту жок кылдык:

  • Биз "service" катмарын кошуп, UI эмес коддордун бардыгын бир эле кызматка көчүрдүк.
  • Биз AsyncTasks-ты чаап, Гуаваны колдонуп угула турган Футураларга көчүп бардык.
  • OkHttp үчүн AsyncHttpClient таштадык.
  • Андан да маанилүүсү, биз көп нерсени окуй баштадык: Таза Код, Таза Архитектура, SOLID, DRY, Прагматикалык Программист, Java Ылайыктуу Практика, Domain Driven Дизайн ж.б.

Көп өтпөй аракетибиздин натыйжаларын көрө баштадык. Өндүрүмдүүлүк жогорулады, биз тезирээк нерселерди жаза баштадык, баары кубанды.

Бул биздин колдонмолорубузду бириктирип, тозоктун баарын жоготуп алгыча болду. Кошумча кызмат катмарына ээ болуу аны кескен жок.

Таза кодекс искусствосу

Таза Архитектура боюнча Боб байкемдин видеолорун бир нече жолу көрүп, Android колдонмо архитектурасында көп окуган соң, MVP дизайн үлгүсү жана RxJava менен тажрыйба жүргүзүүнү чечтим.

Экспериментке бир нече күн өткөндөн кийин, биз таза архитектураны колдонуп, RxJavaга которуп, MVP ишке ашырууну чечтик. Бардык катмарларды интерфейстердин артынан каптап, коопсуздугун камсыз кылдык.

  • Көбүнчө Fragment тарабынан ишке ашырылган Көрүү, баяндамачыга шилтеме камтыйт. Көрүнүш жасай турган жалгыз нерсе - интерфейс аракети болгондо, Баяндамачыдан метод чакыруу.
  • Баяндамачы View менен Modelдин ортосунда ортоңку адам катары жооптуу. Ал моделден маалыматтарды алып, форматталган көрүнүшкө кайтарат. Бирок типтүү MVC айырмаланып, View менен иштешкенде эмне болоорун да чечет.
  • Модель - бул домен катмарынын же бизнес логикасынын дарбазасы.
  • Interactor I / O менен иштейт жана View'де көрсөтүлө турган маалыматтын провайдери.

Эми бир катмарды толугу менен жаңы ишке ашыруу менен которсоңуз болот. UI программасын, Android колдонмосун иштеп чыгуунун бир бөлүгү жана бөлүгү, кайрадан долбоорлоо бир топ жеңилдеди. Акыр-аягы, нерселер бузулбастан тез кыймылдай алат.

Бала скаут эрежеси

Кодду жакшы жазуу жетишсиз, убакыттын өтүшү менен кодду таза сактоо керек. Программанын энтропияга болгон тенденциясы жашоонун чындыгы. Убакыттын өтүшү менен коддун чиришине жана бузулушуна күбө болдук, ошондуктан биз жөнөкөй бала скауттардын: "Лагерьди тапканга караганда тазалап таштаңыз" деген эрежени кабыл алдык.

Эгерде биздин бардыгыбыздын кодубузду текшергенге караганда бир аз тазалап койсоңуз, анда код бузулуп калбайт. Тазалоодо чоң нерсе болбошу керек. Бир өзгөрмө аталышын жакшы жакка өзгөртүңүз, бир аз чоңураак функцияны бөлүңүз, бир аз кичине кайталоону жок кылыңыз жана бир курамдагы if курамдык бөлүгүн тазалаңыз.

жыйынтыктоо

Кеңейтилген колдонмону куруу ыкмасы "туура эмес" болушу мүмкүн жана сиз бул билдирүүгө макул болбойсуз. Акырында, жекеме-жеке мушташ искусствосу же мыкты мушташ искусствосу жөнүндө бирдей пикир келишпейт;)

MVPге карата ар кандай мамилелер бар жана аны Androidга ыңгайлаштыруу үчүн көптөгөн кызыктуу чечимдер бар. Таза Кодекстин мааниси чоң, ошондуктан сиз аны килемдин астына сала албайсыз.

Бул билдирүү Боб байкесинин Таза кодексинен көп карыз алат жана 2011-жылдан баштап Кашифтин Droidcon токтоосунан уурдап алат.

Эгер сизге Таза Код маанилүү болсо, анда сүйлөшөбүз :) Twitter: @_arunsasi LinkedIn: https://www.linkedin.com/in/arunsasidharan

Эгер сиз бул билдирүүнү жактырсаңыз, кичинекей жүрөктү уруңуз! ❤