See on rÀÀgib raamatu muljetest, samuti kÀsitletakse mÔningaid mÔisteid ja teadmisi, mis tÀnu sellele raamatule on omandatud.
Arhitektuur
Kas sa, lugedes seda publikatsiooni, saad anda selge vastuse kĂŒsimusele, mis on arhitektuur? Mis on arhitektuur programmeerimise ja projekteerimise kontekstis? Milline roll tal on? Selle termini osas on siiski palju ebaselgust. Tundub, et kĂ”ik on selge, kuid kuidagi abstraktne ja ilma tĂ€psuseta. Martin peab, ja mina nĂ”ustun temaga, et rakendusel on kaks komponenti:
- KĂ€itumine (behavior) â funktsioonid ja ĂŒlesanded, mida programm (komponent, teenus) tĂ€idab.
- Arhitektuur â see termin rÀÀgib eelkĂ”ige rakenduse muutmisest.
Kuid isegi kui rakendus tĂ€idab vĂ€ga hĂ€sti ĂŒlesannet, mida ta peab tĂ€itma, ei tĂ€henda see, et tal on hea arhitektuur. Arhitektuur ei ole rakenduse kĂ€itumise kohta. Arhitektuur on kergesti muudetavuse, arhitektuur on kergesti juurutamise, arhitektuur on arendamise sĂ”ltumatuse kohta. Arhitektuur on kiirus, millega uuele tiimiliikmele arusaamine tuleb.
Ja kuidas seda arhitektuuri ehitada, kuidas vabaneda peavalust vĂ€ikeste nĂ”udmiste muutuste tĂ”ttu PM-ilt vĂ”i sidusrĂŒhmalt: sellest rÀÀgibki raamat.
Autoritest
Enne kui ma midagi rÀÀgin selle raamatuga seoses, tahan öelda natuke enda kohta.
Praegu olen ma Strong Junior Developer, spetsialiseerudes teenuste arendamisele ASP .NET CORE abil.
Olen juba aasta töötanud ĂŒhes 'galeris', ja tundub, et hakkama saan.
Seda raamatut olen juba kaks korda lugenud, ja soovitan lugemist kÔigile:
- sĂŒsteemide arendajatele;
- front-end arendajatele;
- back-end arendajatele;
- ja isegi devopsidele.
KokkuvĂ”ttes soovitan lugeda kĂ”igile, kes on kuidagi seotud tarkvara arendamisega, mĂ”tlen just otsese arendusega erinevate Sealide ja PM-ide kohta siin ei arvestata (kuigi oleks ka kasulik teada, miks arendaja kulutab ĂŒlesandele kaks korda rohkem aega), soovitan seda raamatut lugeda.
Ja nĂŒĂŒd pĂŒĂŒan argumenteerida, miks ma nii arvan.
Veidi autori kohta sellest raamatust (kuna minu jaoks mĂ€ngib autori autoriteet suurt rolli). Ma arvan, et te hakkate mind mĂ”istma, kuigi see ei ole alati Ă”ige, kuid kui autoriteetne inimene valdkonnas ĂŒtleb midagi, tunnete te sellele palju rohkem usaldust. NĂ€iteks usun, et usalte rohkem arsti poolt mÀÀratud diagnoosi kui mĂ”ne suvalise inimesel rahvas, kes on lihtsalt sĂŒmptomeid internetist otsinud.
Robert Martin, tuntud ka kui Unkle Bob (onu Bob) â on töötanud programeerimise valdkonnas, hĂ”lmates erinevaid sĂŒsteeme (veebiteenustest kuni integreeritud sĂŒsteemideni) alates 1970. aastast. Ta on tehniline konsultant ja arhitekt, on kirjutanud erinevatesse tehnilistesse ajakirjadesse, on iseenesest vĂ€ga kogenud programmeerija ja inimene, kes mĂ€ngis ĂŒht vĂ”tmerolli maailmakuulsate SOLID printsiipide loomisel (vĂ”ib öelda, et nende looja). Samuti tahaksin lisada, et see raamat soovitas mulle minu tiimijuht, kellel on ĂŒle 15-aastane töökogemus.
Raamatust
SÔltuvused
Enne raamatu lugemist lugesin ma ĂŒsna palju artikleid samal Habr'i lehel, kus figureeris sĂ”na âsĂ”ltuvusâ. Mis see on, kes kellelt sĂ”ltub, mida tĂ€pselt tĂ€hendab âsĂ”ltudaâ ja kuidas mĂ”ni klass vĂ”ib kellestki sĂ”ltuda?
Ja raamatu lugemise kÀigus mÔistsin kaks asjaolu:
SĂ”ltuvus on termin, mis tĂ€hendab, et mingi klass (komponent, teenus) teab mingist teisest klassist (komponendist, teenusest), ja see teadmine mÀÀratakse koodi tasandil (nĂŒĂŒd saavad Java, C# ja C-i programmeerijad mind mĂ”ista) kindla nimetu ruumi importimise kaudu. TeisisĂ”nu: teil on klass A nimetu ruumiga Default.Classes ja klass B Another.Classes. Nii et kui klass A allika koodis kasutab using Another.Classes; â tĂ€hendab see, et klass A sĂ”ltub klassist B.
Selleks, et mĂ”ista skeemil, 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 vĂ€hem sĂ”ltuv kui klass A. Ja muudatused klassis A ei kahjusta klassi B.

SOLID
Ăks peamine pĂ”hjus, miks ma seda raamatut lugesin, oli SĐLID printsiipide selgitamine esmaste allikate kaudu, kuna onu Rob töötas nende printsiipide vĂ€lja ja vĂ”ib öelda, et just tema tĂ”ttu kuuleme selle nime â SOLID.
Needless to say, these principles suggest and recommend designing your applications according to 5 rules:
S â SRP (Single Responsibility Principle)
O â OCP (Open-Closed Principle)
L â LSP (Liskov Substitution Principle)
I â ISP (Interface Segregation Principle)
D â DIP (Dependency Inversion Principle)
All these principles can be applied at the levels of classes and objects, modules and components, and layers (services).
If you think that the Single Responsibility Principle means that a class or module should only do one thing, then you definitely need to read at least the chapter about SOLID. Because that definition given above is a consequence, but not the definition of the principle itself.
About Dependency Inversion
I would like to pay special attention to the explanation of the Dependency Inversion Principle (the D from SOLID). While reading the book, I realized that it's not just a principle; itâs also a mechanism and tool that allows you to change the direction of your dependencies and make, for example, your business logic (DOMAIN) independent from the implementation details of the Data Access Layer (DAL).

Although the principle itself, along with the others in SOLID, means something slightly different from the mechanism, this mechanism is used throughout the book, and it is one of the main methods for inverting and changing the direction of your dependencies, which is also used in DDD.
On Making Architectural Decisions
The book will often mention the principle of making important architectural decisions: regarding which database to use, which framework to use, which library to include, what to use as a search engine, etc.
The author believes that you should make SUCH decisions AS LITTLE AS POSSIBLE. Because requirements can change, performance constraints can also change, and the behavioral aspect has a tendency to change. During development, some solution may seem less effective than another, less convenient than another. The strength of your architecture will determine how quickly and painlessly you can replace one technology with another (by the way, OCP emphasizes this).
For example, suddenly, you may decide to use MongoDB instead of PostgreSQL, or even files, or use mocked data with which operations will be performed in memory. And under certain conditions, this may require rewriting almost all logic.
Selle vĂ€ltimiseks saame kasutada mĂ”ningaid mehhanisme, mis viivad otsuse tegemise aega maksimaalselt kaugele. Ăks neist mehhanismidest on abstraktsioon.
Viidatud DDD-le
DDD â DomeenipĂ”hine disain â lĂ€henemine teenuste arendamisele keerulise Ă€ri loogikaga, mis on muutuste suhtes kriitiline ja mis on suunatud projekti juhtide (PM-id, mĂŒĂŒgijuhid jne) maksimaalsele arusaamisele, et rikkaid andmeid saaksid mĂ”ista projektiga seotud inimesed. See tĂ€hendab, et kĂ”ik projekti liikmed kasutavad ĂŒhte ja sama keelt ja saavad ĂŒksteisest aru, et kĂ”ik mĂ”tleksid ĂŒhiselt ĂŒhes domeenis lĂ€htudes ĂŒhtsetest Ă€ri reeglitest.
Kui olete DDD pooldaja, soovite seda olla vĂ”i te ei saa sellest aru, aga soovite aru saada â raamat on kohustuslik lugeda, eriti raamatu teine osa.
Siin selgitab autor SĂ”ltuvuse reegli olemasolu, ja miks, jĂ€rgides seda â ehitate te rakenduse Ă”iget arhitektuuri. Miks sĂ”ltuvused peaksid liikuma kĂ”rge poliitika komponente; miks domeen (KĂ”rge poliitika komponent) peab olema sĂ”ltumatu infrastruktuurist ja kuidas see lihtsustab teie juurutamist ja arendamist

Abstraktsioon
Onu Rob rÀÀgib ka sellest, kuidas rakenduse detailid vĂ”ivad teie sĂŒsteemi kahjustada ja takistada selle edasist arengut ilma valuta.
Pidage meeles!
Andmebaas on rakenduse detail
Kliendid (Web, Mobile jne) â rakenduse detailid
Raamistikud on rakenduse detailid
KĂ”ikidest nendest tuleb maksimaalselt abstraktselt eralduda ja mitte sĂ”ltuda, kasutades ĂŒlaltoodud sĂ”ltuvuse pööramise pĂ”himĂ”tet liideste ja abstraktsioonide ning SĂ”ltuvuse reegli ja muude mehhanismide abil
Moodulite loomise meetodid
See jaotis meeldis mulle eriti, kuna olen teenuste arendaja ASP .NET CORE-is. Siin rÀÀgitakse meetoditest, kuidas luua ĂŒhtne teenuse arhitektuur valmis komponentidest.
Robert kirjeldas 4 vÔimaliku kihistiku jagamise skeemi.
Ta andis mĂ”ista, miks nii sageli kasutatav kolme kihiga arhitektuuri mehanism: UI (kontrollerid), Teenused (Domeen), DAL (Andmebaas) â on vĂ”rreldes teistega ĂŒsna halb. Olen nĂ€inud mitte palju projekte, kuid igas, nĂ€iteks mikroteenuses, kasutatakse just kolme kihiga arhitektuuri.
Samuti kasutatakse sageli arhitektuuri ĂŒks-komponent-ĂŒks-teenus. Ăldiselt on mĂ”lemad head, kuid sellel on piisavalt palju puudusi, vĂ”rreldes nĂ€iteks DDD kasutamise arhitektuuriga, eriti kriitiliste muudatuste ja keeruliste teenuste puhul.
KokkuvĂ”ttes jĂ”udsin selle raamatu ĂŒlevaate lĂ”puni. Raamat ise mulle vĂ€ga meeldis, ei kahetse loetut, tĂ€nan autorit. Teile, kallid lugejad, aitĂ€h tĂ€helepanu eest, Ă€rge olge liiga karmid â see publikatsioon pĂ”hineb muljetest raamatust ja minu isiklikust entusiasmist.
Allikas: habr.com
