ABONAMENTE VIDEO REDACȚIA
RO
EN
NOU
Numărul 150
Numărul 149 Numărul 148 Numărul 147 Numărul 146 Numărul 145 Numărul 144 Numărul 143 Numărul 142 Numărul 141 Numărul 140 Numărul 139 Numărul 138 Numărul 137 Numărul 136 Numărul 135 Numărul 134 Numărul 133 Numărul 132 Numărul 131 Numărul 130 Numărul 129 Numărul 128 Numărul 127 Numărul 126 Numărul 125 Numărul 124 Numărul 123 Numărul 122 Numărul 121 Numărul 120 Numărul 119 Numărul 118 Numărul 117 Numărul 116 Numărul 115 Numărul 114 Numărul 113 Numărul 112 Numărul 111 Numărul 110 Numărul 109 Numărul 108 Numărul 107 Numărul 106 Numărul 105 Numărul 104 Numărul 103 Numărul 102 Numărul 101 Numărul 100 Numărul 99 Numărul 98 Numărul 97 Numărul 96 Numărul 95 Numărul 94 Numărul 93 Numărul 92 Numărul 91 Numărul 90 Numărul 89 Numărul 88 Numărul 87 Numărul 86 Numărul 85 Numărul 84 Numărul 83 Numărul 82 Numărul 81 Numărul 80 Numărul 79 Numărul 78 Numărul 77 Numărul 76 Numărul 75 Numărul 74 Numărul 73 Numărul 72 Numărul 71 Numărul 70 Numărul 69 Numărul 68 Numărul 67 Numărul 66 Numărul 65 Numărul 64 Numărul 63 Numărul 62 Numărul 61 Numărul 60 Numărul 59 Numărul 58 Numărul 57 Numărul 56 Numărul 55 Numărul 54 Numărul 53 Numărul 52 Numărul 51 Numărul 50 Numărul 49 Numărul 48 Numărul 47 Numărul 46 Numărul 45 Numărul 44 Numărul 43 Numărul 42 Numărul 41 Numărul 40 Numărul 39 Numărul 38 Numărul 37 Numărul 36 Numărul 35 Numărul 34 Numărul 33 Numărul 32 Numărul 31 Numărul 30 Numărul 29 Numărul 28 Numărul 27 Numărul 26 Numărul 25 Numărul 24 Numărul 23 Numărul 22 Numărul 21 Numărul 20 Numărul 19 Numărul 18 Numărul 17 Numărul 16 Numărul 15 Numărul 14 Numărul 13 Numărul 12 Numărul 11 Numărul 10 Numărul 9 Numărul 8 Numărul 7 Numărul 6 Numărul 5 Numărul 4 Numărul 3 Numărul 2 Numărul 1
×
▼ LISTĂ EDIȚII ▼
Numărul 36
Abonament PDF

Arhitectura Conică

Adrian Bontea
Software Craftsman
@Yardi România



PROGRAMARE

Universul este construit pe baza unui plan a cărui simetrie profundă este prezentă în structura interioară a intelectului uman. - Paul Valery

Arhitectura Clean este extraordinară! Arhitectura Clean este frumoasă! Arhitectura Clean este simetrică! Arhitectura Clean este naturală! Arhitectura Clean ar trebui pur și simplu să fie firească!

Arhitectura Clean este structura care rezultă într-un mod natural în momentul în care se aplică DIP: "High level modules should not depend on low level modules. Both should depend on abstractions"

Modulele "high level" reprezintă partea cea mai importantă din implementarea unei aplicații; reflectă politicile din implementarea aplicației, abstracțiile generale care guvernează întreaga aplicație; reprezintă conceptele care nu variază când detaliile se schimbă.

Prin opoziție, modulele "low level" se referă la partea de detalii. Acestea sunt mecanismele tehnice generice care susțin modulele "high level": logging, OOM, ORM, e-mail, sms…

Ce nu este în regulă cu Layers?

Patternul traditional Layers încalcă DIP și, din cauza aceasta, implică niște consecințe destul de nefericite.

De zeci de ani folosim Layers pentru a structura diverse aplicații. La fel, de zeci de ani, Layers a fost sinonim cu o structura de calitate - sau aveai Layers, sau aveai BBOM (Big Ball of Mud anti-pattern).

De zeci de ani pretindem că folosim și aplicăm SOLID, dar de fapt nu o facem. În cel mai bun caz, putem afirma că am aplicat SOLI.

Cel puțin în lumea .NET, Layers încalcă DIP prin impunerea unei referințe de la assembly-urile high level către cele low level care fac parte din layer-ul de Infrastructură:

Ce este diferit la Clean Architecture?

În linii mari, Clean Architecture respecta DIP, pe când Layers nu face acest lucru.

Clean concentrează cea mai importantă parte a implementării în partea centrală, externalizând toate detaliile.

Principiul care face ca acest model să funcționeze este numit regula dependenței: "Dependentele în cod pot să fie orientate doar spre interior". Aceasta este de fapt o definiție mult mai pragmatică a DIP.

Este vorba numai despre regula dependenței?

Dacă vă imaginați un model asimetric ce derivă din structura Layers clasică, dar care se conformează DIP, acesta ar arăta cam așa:   Săgețile reprezintă dependințe în cod.

Faptul că reprezentarea Clean Architecture este simetrică, folosind cercuri concentrice, nu este o coincidență. Poate nu este foarte evident, dar această reprezentare ascunde un principiu foarte puternic: toate detaliile sunt doar detalii!

Clean Architecture se concentrează pe cea mai importantă parte a implementării unei aplicații. Acesta este centrul aplicației și acesta este aspectul la care s-a referit DIP sub numele de "high level modules" timp de peste 10 ani. Din punctul de vedere al centrului aplicației, framework-ul de livrare nu este cu nimic mai special decât baza de date sau framework-ul de logare.

Acesta este motivul pentru care Clean Architecture îndreaptă procesul de dezvoltare spre o abordare de tip "domain-out" și pentru care reprezintă un mediu mult mai confortabil și mai natural pentru Domain Driven Design. Acesta este și motivul pentru care întârzierea deciziilor legate de tehnologii vine în mod mult mai natural când folosim Clean Architecture. Este chiar modelul mental impus de cercurile concentrice care te ajută să vezi pădurea, în ciuda copacilor.

Explicarea titlului

După părerea mea, Cone Architecture este doar o metaforă mai expresivă pentru acest tip de structura software. Da, eu am inventat termenul ăsta.

Este vorba despre două perspective diferite: dacă te uiți de sus, vei vedea niște cercuri concentrice guvernate de regula dependenței, care afirmă că dependențele în cod pot fi orientate doar spre interior. Acesta este un punct de vedere strict tehnic.

Dar dacă privești structura dintr-o parte, poți să vezi foarte clar ce vrea să spună DIP prin module "high level" și module "low level". Poți acum să faci deduci mult mai ușor ierarhia straturilor după nivelul lor de abstracție. Cercurile interioare sunt de nivel mai înalt decât cele exterioare.

NUMĂRUL 149 - Development with AI

Sponsori

  • Accenture
  • BT Code Crafters
  • Accesa
  • Bosch
  • Betfair
  • MHP
  • BoatyardX
  • .msg systems
  • P3 group
  • Ing Hubs
  • Cognizant Softvision
  • Colors in projects