Sveiki draugi. Gaidot kursu uzsÄkÅ”anu
ProgrammatÅ«ra atrisina arvien vairÄk ikdienas problÄmu, vienlaikus kļūstot arvien sarežģītÄka. KÄ reiz teica Marks Andreesens, tas patÄrÄ pasauli.
RezultÄtÄ lietojumprogrammu izstrÄdes un piegÄdes veids pÄdÄjos gados ir krasi mainÄ«jies. TÄs bija izmaiÅas tektoniskÄ mÄrogÄ, kuru rezultÄtÄ radÄs principu kopums. Å ie principi ir izrÄdÄ«juÅ”ies noderÄ«gi, veidojot komandu, izstrÄdÄjot, izstrÄdÄjot un nogÄdÄjot jÅ«su lietojumprogrammu galalietotÄjiem.
Principus var apkopot Å”Ädi: lietojumprogrammai jÄbÅ«t mazai, tÄ«meklÄ« balstÄ«tai, un tai jÄbÅ«t uz izstrÄdÄtÄju orientÄtai arhitektÅ«rai. Balstoties uz Å”iem trim principiem, varat izveidot stabilu, visaptveroÅ”u lietojumprogrammu, ko var Ätri un droÅ”i piegÄdÄt galalietotÄjam, un tÄ ir viegli mÄrogojama un paplaÅ”inÄma.
Katram no piedÄvÄtajiem principiem ir vairÄki aspekti, kurus mÄs apspriedÄ«sim, lai parÄdÄ«tu, kÄ katrs princips palÄ«dz sasniegt gala mÄrÄ·i ā Ätri nodroÅ”inÄt uzticamas lietojumprogrammas, kuras ir viegli uzturÄt un lietot. MÄs aplÅ«kosim principus salÄ«dzinÄjumÄ ar to pretstatiem, lai noskaidrotu, ko nozÄ«mÄ teikt: āPÄrliecinieties, ka lietojat mazuma princips'.
MÄs ceram, ka Å”is raksts mudinÄs jÅ«s izmantot piedÄvÄtos principus modernu lietojumprogrammu izveidei, kas nodroÅ”inÄs vienotu dizaina pieeju arvien pieaugoÅ”Äs tehnoloÄ£iju kopas kontekstÄ.
PiemÄrojot Å”os principus, jÅ«s varÄsit izmantot jaunÄkÄs programmatÅ«ras izstrÄdes tendences, tostarp
Kas ir moderna lietotne?
MÅ«sdienÄ«gas lietojumprogrammas? MÅ«sdienu kaudze? Ko Ä«sti nozÄ«mÄ āmodernsā?
LielÄkajai daļai izstrÄdÄtÄju ir tikai pamata izpratne par to, no kÄ sastÄv mÅ«sdienu lietojumprogramma, tÄpÄc ir nepiecieÅ”ams skaidri definÄt Å”o jÄdzienu.
MÅ«sdienÄ«ga lietojumprogramma atbalsta vairÄkus klientus, neatkarÄ«gi no tÄ, vai tÄ ir lietotÄja saskarne, izmantojot React JavaScript bibliotÄku, mobilÄ lietojumprogramma Android vai iOS, vai lietojumprogramma, kas savienojas ar citu, izmantojot API. MÅ«sdienÄ«ga lietojumprogramma ietver nenoteiktu skaitu klientu, kuriem tÄ nodroÅ”ina datus vai pakalpojumus.
MÅ«sdienÄ«ga lietojumprogramma nodroÅ”ina API, lai piekļūtu pieprasÄ«tajiem datiem un pakalpojumiem. API ir jÄbÅ«t nemainÄ«gai un nemainÄ«gai, un tÄ nav rakstÄ«ta Ä«paÅ”i konkrÄtam klienta pieprasÄ«jumam. API ir pieejama, izmantojot HTTP(S), un nodroÅ”ina piekļuvi visÄm GUI vai CLI funkcijÄm.
Datiem ir jÄbÅ«t pieejamiem kopÄjÄ, sadarbspÄjÄ«gÄ formÄtÄ, piemÄram, JSON. API atklÄj objektus un pakalpojumus skaidrÄ, sakÄrtotÄ formÄ; piemÄram, RESTful API vai GraphQL nodroÅ”ina pienÄcÄ«gu saskarni.
MÅ«sdienu lietojumprogrammas ir veidotas uz moderna steka, un modernÄ steks ir attiecÄ«gi steks, kas atbalsta Å”Ädas lietojumprogrammas. Å Ä« kaudze ļauj izstrÄdÄtÄjam viegli izveidot lietojumprogrammu ar HTTP saskarni un skaidriem API galapunktiem. JÅ«su izvÄlÄtÄ pieeja ļaus jÅ«su lietojumprogrammai viegli pieÅemt un nosÅ«tÄ«t datus JSON formÄtÄ. Citiem vÄrdiem sakot, modernÄ kaudze atbilst divpadsmit faktoru lietojumprogrammas elementiem
Å Äda veida kaudzes populÄrÄs versijas ir balstÄ«tas uz
LÅ«dzu, Åemiet vÄrÄ, ka mÄs neatbalstÄm tikai mikropakalpojumu pieeju. Daudzi no jums strÄdÄ ar monolÄ«tiem, kuriem ir jÄattÄ«stÄs, savukÄrt citi nodarbojas ar SOA lietojumprogrammÄm, kas paplaÅ”inÄs un attÄ«stÄs, lai kļūtu par mikropakalpojumu lietojumprogrammÄm. VÄl citi virzÄs uz lietojumprogrammÄm bez serveriem, un daži ievieÅ” iepriekÅ” minÄto kombinÄcijas. Å ajÄ rakstÄ izklÄstÄ«tie principi attiecas uz katru no Ŕīm sistÄmÄm tikai ar dažÄm nelielÄm izmaiÅÄm.
Principi
Tagad, kad mums ir pamatzinÄÅ”anas par to, kas ir moderna lietojumprogramma un moderna steks, ir pienÄcis laiks ienirt arhitektÅ«rÄ un projektÄÅ”anas principos, kas jums noderÄs modernas lietojumprogrammas projektÄÅ”anÄ, ievieÅ”anÄ un uzturÄÅ”anÄ.
Viens no principiem ir "veidojiet mazas aplikÄcijas", sauksim tÄ mazuma princips. Ir neticami sarežģītas lietojumprogrammas, kurÄs ir daudz kustÄ«gu daļu. SavukÄrt lietojumprogrammas izveide no maziem, diskrÄtiem komponentiem padara to vieglÄk izstrÄdÄtu, uzturÄt un lietot kopumÄ. (Å emiet vÄrÄ, ka mÄs teicÄm āpadara to vienkÄrÅ”uā, nevis āpadara vienkÄrÅ”uā).
Otrais princips ir tÄds, ka mÄs varam palielinÄt izstrÄdÄtÄju produktivitÄti, palÄ«dzot viÅiem koncentrÄties uz funkcijÄm, ko viÅi izstrÄdÄ, vienlaikus atbrÄ«vojot viÅus no raizÄm par infrastruktÅ«ru un CI/CD ievieÅ”anas laikÄ. TÄtad, Ä«sumÄ, mÅ«su pieeja uz izstrÄdÄtÄju orientÄts.
Visbeidzot, visam jÅ«su lietojumprogrammai ir jÄbÅ«t savienotam ar tÄ«klu. PÄdÄjo 20 gadu laikÄ mÄs esam ievÄrojami virzÄ«juÅ”ies uz tÄ«klu nÄkotnÄ, jo tÄ«kli ir kļuvuÅ”i ÄtrÄki un lietojumprogrammas ir kļuvuÅ”as sarežģītÄkas. KÄ mÄs jau redzÄjÄm, moderna lietojumprogramma tÄ«klÄ ir jÄizmanto daudziem dažÄdiem klientiem. TÄ«kla domÄÅ”anas pielietoÅ”anai arhitektÅ«rÄ ir ievÄrojamas priekÅ”rocÄ«bas, kas labi atbilst mazuma princips un pieejas koncepcija, uz izstrÄdÄtÄju orientÄts.
Ja paturÄsiet prÄtÄ Å”os principus, izstrÄdÄjot un ievieÅ”ot lietojumprogrammu, jums bÅ«s izteiktas priekÅ”rocÄ«bas sava produkta izstrÄdÄ un piegÄdÄ.
ApskatÄ«sim Å”os trÄ«s principus sÄ«kÄk.
Mazuma princips
CilvÄka smadzenÄm ir grÅ«ti uzreiz uztvert lielu informÄcijas daudzumu. PsiholoÄ£ijÄ termins kognitÄ«vÄ slodze attiecas uz kopÄjo garÄ«gÄs piepÅ«les apjomu, kas nepiecieÅ”ams, lai saglabÄtu informÄciju atmiÅÄ. IzstrÄdÄtÄju kognitÄ«vÄs slodzes samazinÄÅ”ana ir prioritÄte, jo viÅi pÄc tam var koncentrÄties uz problÄmas risinÄÅ”anu, nevis paturÄt prÄtÄ paÅ”reizÄjo sarežģīto visas lietojumprogrammas modeli un izstrÄdÄtÄs funkcijas.
Lietojumprogrammas tiek sadalÄ«tas Å”Ädu iemeslu dÄļ:
- SamazinÄt izstrÄdÄtÄju kognitÄ«vo slodzi;
- TestÄÅ”anas paÄtrinÄÅ”ana un vienkÄrÅ”oÅ”ana;
- Ätra aplikÄcijas izmaiÅu piegÄde.
Ir vairÄki veidi, kÄ samazinÄt izstrÄdÄtÄju kognitÄ«vo slodzi, un Å”eit tiek izmantots mazuma princips.
TÄtad, trÄ«s veidi, kÄ samazinÄt kognitÄ«vo slodzi:
- Samaziniet laika posmu, kas viÅiem jÄÅem vÄrÄ, izstrÄdÄjot jaunu funkciju ā jo Ä«sÄks laika posms, jo mazÄka ir kognitÄ«vÄ slodze.
- Samaziniet koda daudzumu, pie kura tiek strÄdÄts vienlaikus ā mazÄk koda ā mazÄk slodzes.
- VienkÄrÅ”ojiet pakÄpenisku izmaiÅu veikÅ”anu savÄ lietojumprogrammÄ.
SamazinÄts izstrÄdes laika posms
Atgriezīsimies tajos laikos, kad metodoloģija waterfall
bija izstrÄdes procesa standarts, un laika periodi no seÅ”iem mÄneÅ”iem lÄ«dz diviem gadiem lietojumprogrammas izstrÄdei vai atjauninÄÅ”anai bija ierasta prakse. Parasti inženieri vispirms izlasÄ«s attiecÄ«gos dokumentus, piemÄram, produkta prasÄ«bas (PRD), sistÄmas atsauces dokumentu (SRD), arhitektÅ«ras plÄnu un sÄk integrÄt visas Ŕīs lietas vienÄ kognitÄ«vÄ modelÄ«, saskaÅÄ ar kuru viÅi rakstÄ«ja kodu. Mainoties prasÄ«bÄm un lÄ«dz ar to arÄ« arhitektÅ«rai, bija jÄpieliek lielas pÅ«les, lai visa komanda bÅ«tu informÄta par kognitÄ«vÄ modeļa atjauninÄjumiem. SliktÄkajÄ gadÄ«jumÄ Å”Ä« pieeja var vienkÄrÅ”i paralizÄt darbu.
LielÄkÄs izmaiÅas aplikÄciju izstrÄdes procesÄ bija veiklÄs metodoloÄ£ijas ievieÅ”ana. Viena no metodoloÄ£ijas galvenajÄm iezÄ«mÄm agile
- TÄ ir iteratÄ«va attÄ«stÄ«ba. SavukÄrt tas noved pie inženieru kognitÄ«vÄs slodzes samazinÄÅ”anÄs. TÄ vietÄ, lai izstrÄdÄtÄju komandai bÅ«tu jÄievieÅ” lietojumprogramma vienÄ garÄ ciklÄ, agile
Å Ä« pieeja ļauj koncentrÄties uz nelielu koda daudzumu, ko var Ätri pÄrbaudÄ«t un izvietot, vienlaikus saÅemot arÄ« atsauksmes. Lietojumprogrammas kognitÄ«vÄ slodze ir mainÄ«jusies no seÅ”u mÄneÅ”u laika posma uz diviem gadiem ar milzÄ«gu specifikÄciju skaitu uz divu nedÄļu funkciju pievienoÅ”anu vai maiÅu, kas ir vÄrsta uz izkliedÄtÄku izpratni par lielu lietojumprogrammu.
Fokusa pÄrslÄgÅ”ana no masÄ«vas lietojumprogrammas uz Ä«paÅ”Äm mazÄm funkcijÄm, kuras var pabeigt divu nedÄļu sprintÄ, domÄjot par ne vairÄk kÄ vienu funkciju no nÄkamÄ sprinta, ir bÅ«tiskas izmaiÅas. Tas ļÄva palielinÄt attÄ«stÄ«bas produktivitÄti, vienlaikus samazinot kognitÄ«vo slodzi, kas pastÄvÄ«gi svÄrstÄ«jÄs.
MetodoloÄ£ijÄ agile
Paredzams, ka galÄ«gais pieteikums bÅ«s nedaudz pÄrveidota sÄkotnÄjÄs koncepcijas versija, tÄpÄc galÄ«gais izstrÄdes punkts noteikti ir neskaidrs. Skaidri un precÄ«zi var bÅ«t tikai katra konkrÄtÄ sprinta rezultÄti.
Mazas kodu bÄzes
NÄkamais solis kognitÄ«vÄs slodzes samazinÄÅ”anai ir koda bÄzes samazinÄÅ”ana. Parasti mÅ«sdienu lietojumprogrammas ir milzÄ«gas ā spÄcÄ«ga, uzÅÄmuma lietojumprogramma var sastÄvÄt no tÅ«kstoÅ”iem failu un simtiem tÅ«kstoÅ”u koda rindu. AtkarÄ«bÄ no failu organizÄcijas, savienojumi un atkarÄ«bas starp kodu un failiem var bÅ«t vai nebÅ«t acÄ«mredzami. Pat paÅ”as koda izpildes atkļūdoÅ”ana var bÅ«t problemÄtiska atkarÄ«bÄ no izmantotajÄm bibliotÄkÄm un no tÄ, cik labi atkļūdoÅ”anas rÄ«ki atŔķir bibliotÄkas/pakas/moduļus un lietotÄja kodu.
Lietojumprogrammas koda darba garÄ«gÄ modeļa izveide var aizÅemt ievÄrojamu laiku, atkal radot lielu kognitÄ«vo slodzi izstrÄdÄtÄjam. Tas jo Ä«paÅ”i attiecas uz monolÄ«tajÄm kodu bÄzÄm, kur ir liels koda daudzums, funkcionÄlo komponentu mijiedarbÄ«ba nav skaidri definÄta un uzmanÄ«bas objektu atdalÄ«Å”ana bieži ir neskaidra, jo netiek ievÄrotas funkcionÄlÄs robežas.
Viens efektÄ«vs veids, kÄ samazinÄt inženieru kognitÄ«vo slodzi, ir pÄriet uz mikropakalpojumu arhitektÅ«ru. Mikropakalpojumu pieejÄ katrs pakalpojums koncentrÄjas uz vienu funkciju kopu; pakalpojuma nozÄ«me parasti ir definÄta un saprotama. ArÄ« pakalpojuma robežas ir skaidras ā atcerieties, ka saziÅa ar servisu tiek veikta, izmantojot API, tÄpÄc viena pakalpojuma Ä£enerÄtos datus var viegli pÄrsÅ«tÄ«t uz citu.
MijiedarbÄ«ba ar citiem pakalpojumiem parasti aprobežojas ar dažiem lietotÄju pakalpojumiem un dažiem pakalpojumu sniedzÄja pakalpojumiem, kas izmanto vienkÄrÅ”us un tÄ«rus API zvanus, piemÄram, REST. Tas nozÄ«mÄ, ka inženiera kognitÄ«vÄ slodze ir nopietni samazinÄta. LielÄkais izaicinÄjums joprojÄm ir izprast pakalpojumu mijiedarbÄ«bas modeli un to, kÄ, piemÄram, darÄ«jumi notiek vairÄkos pakalpojumos. Galu galÄ mikropakalpojumu izmantoÅ”ana samazina kognitÄ«vo slodzi, samazinot koda daudzumu, definÄjot skaidras pakalpojumu robežas un sniedzot ieskatu lietotÄja un pakalpojumu sniedzÄja attiecÄ«bÄs.
Nelielas pakÄpeniskas izmaiÅas
PÄdÄjais principa elements mazliet ir pÄrmaiÅu vadÄ«ba. IzstrÄdÄtÄjiem ir Ä«paÅ”i vilinoÅ”i aplÅ«kot koda bÄzi (pat, iespÄjams, viÅu paÅ”u vecÄku kodu) un teikt: "TÄ ir muļķība, mums ir jÄpÄrraksta visa Ŕī lieta." Dažreiz tas ir pareizs lÄmums, un dažreiz tas nav. Tas uzliek globÄlo modeļu izmaiÅu slogu izstrÄdes komandai, kas savukÄrt rada milzÄ«gu izziÅas slodzi. Inženieriem labÄk koncentrÄties uz izmaiÅÄm, ko viÅi var veikt sprinta laikÄ, lai pÄc tam varÄtu laicÄ«gi, kaut arÄ« pakÄpeniski, ieviest nepiecieÅ”amo funkcionalitÄti. Galaproduktam vajadzÄtu lÄ«dzinÄties iepriekÅ” plÄnotajam, taÄu ar dažÄm modifikÄcijÄm un testÄÅ”anu, lai tas atbilstu klienta vajadzÄ«bÄm.
PÄrrakstot lielas koda daļas, dažkÄrt nav iespÄjams Ätri veikt izmaiÅas, jo tiek izmantotas citas sistÄmas atkarÄ«bas. Lai kontrolÄtu izmaiÅu plÅ«smu, varat izmantot funkciju slÄpÅ”anu. BÅ«tÄ«bÄ tas nozÄ«mÄ, ka funkcionalitÄte ir pieejama ražoÅ”anÄ, taÄu tÄ nav pieejama, izmantojot vides mainÄ«go iestatÄ«jumus (env-var) vai kÄdu citu konfigurÄcijas mehÄnismu. Ja kods ir izturÄjis visus kvalitÄtes kontroles procesus, tas var nonÄkt ražoÅ”anÄ slÄptÄ stÄvoklÄ«. TomÄr Ŕī stratÄÄ£ija darbojas tikai tad, ja funkcija beidzot ir iespÄjota. PretÄjÄ gadÄ«jumÄ tas tikai pÄrblÄ«vÄs kodu un pievienos kognitÄ«vo slodzi, ar kuru izstrÄdÄtÄjam bÅ«s jÄtiek galÄ, lai tas bÅ«tu produktÄ«vs. IzmaiÅu pÄrvaldÄ«ba un pakÄpeniskas izmaiÅas palÄ«dz uzturÄt izstrÄdÄtÄju kognitÄ«vo slodzi pieejamÄ lÄ«menÄ«.
Inženieriem ir jÄpÄrvar daudzas grÅ«tÄ«bas, pat vienkÄrÅ”i ievieÅ”ot papildu funkcionalitÄti. VadÄ«bai bÅ«tu saprÄtÄ«gi samazinÄt nevajadzÄ«go darba slodzi komandai, lai tÄ varÄtu koncentrÄties uz galvenajiem funkcionalitÄtes elementiem. Ir trÄ«s lietas, ko varat darÄ«t, lai palÄ«dzÄtu savai izstrÄdes komandai:
- Izmantojiet metodiku
agile
, lai ierobežotu laika posmu, kurÄ komandai jÄkoncentrÄjas uz galvenajÄm funkcijÄm. - Ieviesiet savu lietojumprogrammu kÄ vairÄkus mikropakalpojumus. Tas ierobežos ieviesto funkciju skaitu un nostiprinÄs robežas, kas darba laikÄ satur kognitÄ«vo slodzi.
- Dodiet priekÅ”roku pakÄpeniskÄm izmaiÅÄm, nevis lielÄm, smagnÄjÄm izmaiÅÄm, mainiet nelielas koda daļas. Izmantojiet funkciju slÄpÅ”anu, lai ieviestu izmaiÅas pat tad, ja tÄs nebÅ«s redzamas uzreiz pÄc pievienoÅ”anas.
Ja savÄ darbÄ izmantosit mazuma principu, jÅ«su komanda bÅ«s daudz laimÄ«gÄka, labÄk koncentrÄjas uz nepiecieÅ”amo funkciju nodroÅ”inÄÅ”anu un, visticamÄk, ÄtrÄk ieviesÄ«s kvalitÄtes izmaiÅas. TaÄu tas nenozÄ«mÄ, ka darbs nevar kļūt sarežģītÄks, dažkÄrt, gluži otrÄdi, jaunas funkcionalitÄtes ievieÅ”anai nepiecieÅ”ama vairÄku servisu modificÄÅ”ana un Å”is process var bÅ«t sarežģītÄks nekÄ lÄ«dzÄ«gs monolÄ«tÄ arhitektÅ«rÄ. JebkurÄ gadÄ«jumÄ Å”Ä«s pieejas izmantoÅ”anas priekÅ”rocÄ«bas ir nedaudz tÄ vÄrtas.
PirmÄs daļas beigas.
DrÄ«zumÄ publicÄsim tulkojuma otro daļu, bet tagad gaidÄm jÅ«su komentÄrus un aicinÄm to darÄ«t
Avots: www.habr.com