ABONAMENTE VIDEO REDACȚIA
RO
EN
×
▼ 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.

LANSAREA NUMĂRULUI 90

Prezentări articole și
Panel: Mobility Services

Miercuri, 11 Decembrie, ora 18:00
sediul Accenture

Înregistrează-te

Facebook Meetup

Sponsori

  • comply advantage
  • ntt data
  • 3PillarGlobal
  • Betfair
  • Telenav
  • Accenture
  • Siemens
  • Bosch
  • FlowTraders
  • MHP
  • Connatix
  • UIPatj
  • MetroSystems
  • Globant
  • Colors in projects