LĂŒhidalt peamisest: Clean Architecture, Robert C. Martin

See on jutt raamatust, samuti kÀsitleme mÔningaid mÔisteid ja teadmisi, mida tÀnu sellele raamatule on omandatud.

Arhitektuur

Kas te suudate sellele postitusele lugedes selgelt vastata kĂŒsimusele, mis on arhitektuur? Mis on arhitektuur programmeerimise ja disaini kontekstis? Millist rolli see mĂ€ngib? Selles mĂ”ttes on palju ebaselgust. KĂ”ik tundub justkui selge, kuid siiski abstraktne ja tĂ€psuseta. Martin ĂŒtleb, ja ma olen temaga ĂŒhel meelel, et rakendusel on kaks osa:

  1. KĂ€itumine (behavior) — funktsioonid ja ĂŒlesanded, mida programm (komponent, teenus) tĂ€idab.
  2. Arhitektuur — see mĂ”isted kĂ€sitleb rohkem rakenduse muutmist.

Kuid isegi kui rakendus tĂ€idab vĂ€ga hĂ€sti ĂŒlesande, mille ta peab tĂ€itma, ei tĂ€henda see, et tal on hea arhitektuur. Arhitektuur ei ole rakenduse kĂ€itumise kohta. Arhitektuur on seotud muudatuste lihtsusega, arhitektuur on seotud juurutamise lihtsusega, arhitektuur on seotud arendamise sĂ”ltumatusega. Arhitektuur on seotud sellega, kui kiiresti uus inimene meeskonnas mĂ”istmisele jĂ”uab.

Nii ehitatakse seda arhitektuuri, kuidas vabaneda peavalust, kui PM-ist vĂ”i sidusrĂŒhmast tuleb vĂ€ikseid nĂ”udmiste muudatusi: sellest rÀÀgib ka raamat.

Autoritest

Enne kui rÀÀgin millestki selle raamatu kohta, tahan natuke endast rÀÀkida.
Praegu olen ma Strong Junior Developer, kes spetsialiseerub teenuste arendamisele ASP .NET CORE abil.

Olen aastast töötanud ĂŒhes 'galerii' projektis ja paistab, et jĂ€rk-jĂ€rgult saan hakkama.

Olen seda raamatut juba kaks korda lugenud ja soovitan seda kÔigile:

  • integraaltarkvara arendajatele;
  • veebiarendajatele;
  • tagaplaanide arendajatele;
  • ja isegi dev-ops spetsialistidele.

LĂ”ppude lĂ”puks, kĂ”igile, kes on seotud tarkvara arendusega, silmas pidades otsest arendust, nĂ€iteks erinevaid mĂŒĂŒgi- ja projektijuhte siia ei kaasata (kuigi oleks kasulik teada, miks arendaja vĂ”ib ĂŒlesande tĂ€itmiseks kaks korda rohkem aega kulutada), soovitan seda raamatut lugeda.
Ja nĂŒĂŒd pĂŒĂŒan ma pĂ”hjendada, miks ma nii arvan.

Veidi autori kohta, sest minu jaoks on autoriteet kirjutaja osas vĂ€ga oluline. Arvan, et saate minust aru; kuigi see ei ole alati Ă”ige, usaldate autoriteetse inimese sĂ”nu rohkem, kui kellelegi, kes on lihtsalt rahvamassist (kes on sĂŒmptomeid google'inud).

Robert Martin, tuntud ka kui Uncle Bob (onkli Bob) — töötab programmeerimise valdkonnas, hĂ”lmates erinevaid sĂŒsteeme (alates veebi teenustest kuni sisseehitatud sĂŒsteemideni) alates 1970. aastast. Ta on tehniline konsultant ja arhitekt, on kirjutanud erinevatesse tehnilistesse ajakirjadesse, olles vĂ€ga kogenud programmeerija ning inimene, kes mĂ€ngis ĂŒht olulist rolli kĂ”igile tuntud SOLID pĂ”himĂ”tete loomisel (vĂ”ib öelda, et on nende looja). Samuti tahaksin mainida, et see raamat on mulle soovitanud minu tiimijuht, kes omab rohkem kui 15-aastast töökogemust.

Raamatust

SÔltuvused

Enne raamatu lugemist lugesin ma ĂŒsna palju artikleid samal Habr'is, kus kĂ”neldi sellisest sĂ”nast nagu "sĂ”ltuvus". Mis see on, kes keda sĂ”ltub, mida tĂ€pselt tĂ€hendab "sĂ”ltuda" ja kuidas vĂ”ib mĂ”ni klass sĂ”ltuda kelleltki?

Ja raamatu lugemise kÀigus mÔistsin kahte asja:

SÔltuvus on termin, mis tÀhendab, et mÔni klass (komponent, teenus) teab mÔnest teisest klassist (komponendist, teenusest) ja see teadmine mÀÀratakse kooditasemel (praegu saavad Java, C# ja C keele arendajad mind aru saada) teatud nimede impordiga. TeisisÔnu: teil on klass A, mille nimede ruum on Default.Classes, ja klass B, mille nimede ruum on Another.Classes. Kui klassi A allika koodis kasutatakse 'using Another.Classes;', siis see tÀhendab, et klass A sÔltub klassist B.
Skeemi mĂ”istmiseks, kus on sĂ”ltuv klass ja kus mitte — vaadake noole suunda: 1) nool osutab klassist A klassi B suunas. See tĂ€hendab, et klass B on sĂ”ltumatum kui klass A. Ja klassi A muutused ei kahjusta klassi B.

LĂŒhidalt peamisest: Clean Architecture, Robert C. Martin

SOLID

Üks peamisi pĂ”hjuseid, miks ma selle raamatu lugemist alustasin, oli SOLID printsiipide selgitamine esmaallikast, kuna onu Bob arendas neid printsiipe ja vĂ”ib öelda, et tĂ€nu temale kuuleme seda nime — SOLID.
Neile, kes ei ole kursis — need printsiipe öeldakse ja soovitatakse, et oma rakendusi disainitaks vastavalt viiele reeglile:

S — SRP (Üksiku vastutuse printsiip)
O — OCP (Avatud-suletud printsiip)
L — LSP (Liskovi asenduse printsiip)
I — ISP (Liidese segregatsiooni printsiip)
D — DIP (SĂ”ltuvuse pööramise printsiip)

KÔiki neid printsiibe saab rakendada klasside ja objektide, moodulite ja komponentide ning kihtide (teenuste) tasandil.

Kui arvate, et Üksiku vastutuse printsiip tĂ€hendab, et klass vĂ”i moodul peaks tegema ainult ĂŒhte asja — siis peate kindlasti lugema vĂ€hemalt peatĂŒkki SOLID-i kohta. Sest see eeltoodud mÀÀratlus on tagajĂ€rg, mitte ei ole printsiibi enda mÀÀratlemine.

SÔltuvuse pööramine

Soovin pöörata erilist tĂ€helepanu sĂ”ltuvuse inversiooniprinsiibi (D SOLID’ist) selgitusele. Raamatu lugemise kĂ€igus mĂ”istsin, et see ei ole lihtsalt pĂ”himĂ”te, vaid ka mehhanism ja tööriist, millega saate muuta oma sĂ”ltuvuste suunda ja nĂ€iteks teha Ă€riloogika (DOMAIN) sĂ”ltumatuks andmejuhtimise kihist (DAL).

LĂŒhidalt peamisest: Clean Architecture, Robert C. Martin

Kuigi ise pĂ”himĂ”te SÕLIDis tĂ€hendab koos teistega veidi midagi muud kui mehhanism, kasutatakse seda mehhanismi raamatus pidevalt, ning see on ĂŒks peamisi meetodeid teie sĂ”ltuvuste inversiooniks ja suuna muutmiseks, mida tegelikult kasutatakse DDD-s.

Architektuuriotsuste tegemine

Raamatus mainitakse vÀga sageli pÔhimÔtet oluliste architektuuriotsuste tegemisest: millist andmebaasi kasutada, millist raamistikku valida, millist teeki siduda, mida kasutada otsingumootorina jne.

Autori arvates peaksite selliseid otsuseid langetama KUI VÕIMALIKULT HARVA. Kuna nĂ”uded vĂ”ivad muutuda, vĂ”ivad jĂ”udluse piirangud samuti varieeruda ning kĂ€itumuslik komponent kalduvad muutuma. Arendusprotsessi kĂ€igus vĂ”ib ĂŒks vĂ”i teine lahendus osutuda vĂ€hem tĂ”husaks kui teine, vĂ€hem mugavaks kui mĂ”ni teine. Ja teie arhitektuuri tugevus mÀÀrab, kui kiiresti ja valutult suudate ĂŒhe tehnoloogia teise vastu vahetada (nagu viitab ka OCP).

NĂ€iteks, ĂŒhel hetkel otsustate asendada Postgresql'i MongoDb’ga, vĂ”i hoopis kasutada faile, vĂ”i kasutada simuleeritud andmeid, mille operatsioonid toimuvad mĂ€lus. Teatud tingimustel vĂ”ib see sundida ĂŒmber kirjutama peaaegu kogu loogika.

Selliste olukordade vĂ€ltimiseks saame kasutada teatud mehhanisme, mis viivad otsuste langetamise aega maksimaalselt edasi. Üks neist mehhanismidest on abstraktsioon.

Viidatud DDD

DDD — Domain Driven Design — on lĂ€henemine teenuste arendusele, kus on keeruline Ă€riloogika, mis on muutustele kriitiline, ja mis on suunatud projekti juhtivate positsioonide (PM-ide, mĂŒĂŒgijuhid jne) maksimaalsele mĂ”istmisele, koos rikka arendusega. EesmĂ€rk on, et kĂ”ik projekti osalised rÀÀgiksid ĂŒhte keelt ehk ubiquitous language, mistĂ”ttu saaks igaĂŒks teist mĂ”ista ning kĂ”ik mĂ”tleksid samas domeenis ĂŒhiste Ă€rireeglitega.

Kui olete DDD pooldaja, vĂ”i soovite selleks saada, vĂ”i kui te ei mĂ”ista midagi, aga soovite mĂ”ista — siis see raamat on kohustuslik lugemine, eriti raamatu teine osa.

Siin seletab autor, mis on Dependency Rule, ja miks selle jÀrgimine aitab teil luua Ôige rakenduse arhitektuuri. Miks sÔltuvused peavad liikuma suunas, kus on kÔrge poliitika komponendid, miks domeeni (kÔrge poliitika komponent) peab olema sÔltumatu infrastruktuurist ja kuidas see lihtsustab teie juurutamist ja arendust.

LĂŒhidalt peamisest: Clean Architecture, Robert C. Martin

Abstraktsioon

Onu Rob rÀÀgib ka sellest, kuidas rakenduse ĂŒksikasjad vĂ”ivad kahjustada teie sĂŒsteemi ja takistada selle edasist evolutsiooni ilma valudeta.

Pidage meeles!
DB on rakenduse ĂŒksikasjalik element.
Kliendid (Web, mobiil jne) — on rakenduse ĂŒksikasjad.
Raamistikke on rakenduse teostamise element.

KĂ”igest sellest tuleb maksimaalselt abstraktselt lĂ€heneda ja mitte sĂ”ltuda, kasutades ĂŒlaltoodud sĂ”ltuvuse inversiooni, liideseid ja abstraktsioone, sĂ”ltuvuse reeglit ning teisi mehhanisme.

Modulite ĂŒlesehitamise meetodid.

See jagu meeldis mulle eriti, kuna olen ASP .NET CORE teenuste arendaja. Siin rÀÀgitakse teenuse ĂŒhtse arhitektuuri ehitamise metodoloogiatest, kasutades valmis komponente.

Robert kirjeldas 4 vÔimalikku kihtide lahendamist.

Ta selgitas, miks nii tihti kasutatav kolm kihilist arhitektuuri mehhanism: UI (kontrollerid), teenused (domeen), DAL (andmebaas) on teistega vÔrreldes piisavalt halb. Olen nÀinud mitte vÀga palju projekte, kuid igas, nÀiteks mikroteenuses, kasutatakse just kolme kihilist arhitektuuri tagaplaanil.

Samuti kasutatakse sageli arhitektuuri, kus ĂŒks komponent on ĂŒks teenus. Üldiselt on nad mĂ”lemad head, kuid neil on rohkesti miinuseid, vĂ”rreldes nĂ€iteks DDD kasutamisega, eriti kriitiliselt muudetavates ja keerulistes teenustes.

KokkuvĂ”ttes on see raamatukirjeldus jĂ”udnud lĂ”pule. Mulle meeldis raamat vĂ€ga, ei kahetse, et seda lugesin. AitĂ€h autorile. Kallid lugejad, aitĂ€h tĂ€helepanu eest, palun Ă€rge olge liiga ranged – see publikatsioon pĂ”hineb raamatu muljetel ja minu isiklikul entusiasmiga.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster