Sobes.tech
Senior

Pastāstiet par sešstūra arhitektūru un tās izcelsmi.

sobes.tech AI

Atbilde no AI

Heksagonālā arhitektūra (Ports and Adapters) ir arhitektūras šablons, ko piedāvāja Alisters Koberns. Tā ir paredzēta izolēt uzņēmējdarbības loģikas kodolu no ārējām atkarībām (UI, datu bāzēm, trešo pušu pakalpojumiem).

Izcelsme:

Alisters Koberns iepazīstināja ar šo koncepciju 2005. gadā. Galvenā ideja radās kā reakcija uz tradicionālajām daudzslāņu arhitektūrām, kurās uzņēmējdarbības loģika bieži bija cieši saistīta ar infrastruktūras slāni. Koberns vēlējās izveidot arhitektūru, kas ļautu izstrādāt un testēt uzņēmējdarbības loģiku neatkarīgi no tā, kā tā sadarbojas ar ārējo pasauli. Nosaukums "heksagonālā" simbolizē iespēju lietotnei sadarboties ar dažādiem ārējiem "adapteriem" caur "pordiem". Heksagonu izvēlējās kā abstraktu figūru ar pietiekami daudz "malu" (pordu), lai sadarboties ar dažādām sistēmām.

Galvenie principi:

  • Kodols (Core / Domain): Satur tīru uzņēmējdarbības loģiku un domēna objektus. Tas nav atkarīgs no ārējām tehnoloģijām.
  • Pordi (Ports): Interfeisi, kas definē sadarbību starp kodolu un ārējo pasauli. Pastāv divu veidu pordi:
    • Ieejas (Driving Ports): Definē, kā ārējie aģenti (piem., lietotāja interfeiss vai API) var izsaukt kodola funkcijas.
    • Izejas (Driven Ports): Definē, kā kodols var sadarboties ar ārējiem pakalpojumiem (piem., datu bāzi vai trešo pušu API). Kodols definē šīs interfeisa, bet tās neīsteno.
  • Adapteri (Adapters): Ienīst pordus un kalpo kā saikne starp kodolu un ārējiem elementiem. Pastāv arī divu veidu adapteri:
    • Ieejas (Driving Adapters): Pārveido pieprasījumus no ārējiem aģentiem formātā, ko saprot kodols (piem., UI adapters).
    • Izejas (Driven Adapters): Pārveido kodola izsaukumus formātā, ko saprot ārējās pakalpojumi (piem., datu bāzes adapters).

Priekšrocības:

  • Izolācija: Uzņēmējdarbības loģikas kodols nav atkarīgs no ārējām tehnoloģijām.
  • Testējamība: Kodols var tikt testēts neatkarīgi, bez nepieciešamības palaist visu staku.
  • Elastība: Vieglāk nomainīt vienu adapteri ar citu bez kodola izmaiņām (piem., pāriet no vienas datu bāzes uz citu).
  • Uzturēšana: Atšķirīgas programmas daļas (kodols un adapteri) var tikt izstrādātas un attīstītas neatkarīgi.

Piemērs frontendā:

Lai gan heksagonālā arhitektūra biežāk saistīta ar backend, tās principi var tikt piemēroti arī frontendā, strukturējot klienta lietotni:

  • Kodols: Moduļi, kas satur uzņēmējdarbības loģiku un lietotnes stāvokli (piem., Redux reducētāji, Zustand glabātuve, komponenti ar tīru loģiku bez DOM saistības).
  • Pordi: Interfeisi, kas definē, kā UI sadarbojas ar loģiku (ieejošie), un kā loģika sadarbojas ar ārējiem API vai vietējo glabātuvi (izejošie).
  • Adapteri: UI komponenti, kas apstrādā lietotāja ievadi un izsauc pordus (ieejošie adapteri), un pakalpojumi, kas veic HTTP pieprasījumus vai strādā ar pārlūkprogrammas API localStorage (izejošie adapteri).

Piemērs struktūra (abstrakta):

📦 app
 ┣ 📂 core
 ┃ ┣ 📂 domain
 ┃ ┃ ┗ 📜 todos.ts  // Todo objekta apraksts
 ┃ ┣ 📂 application
 ┃ ┃ ┗ 📜 todoService.ts // Uzņēmējdarbības loģika ar Todo
 ┃ ┗ 📂 ports
 ┃ ┃ ┣ 📜 in/ITodoUseCase.ts // Ieejas porthas (UI interfeiss)
 ┃ ┃ ┗ 📜 out/ITodoRepository.ts // Izejas porthas (pieejas interfeiss datiem)
 ┣ 📂 infra
 ┃ ┣ 📂 adapters
 ┃ ┃ ┣ 📂 in/reactUIAdapter.tsx // Ieejas adapters (React komponents)
 ┃ ┃ ┗ 📂 out/apiTodoRepository.ts // Izejas adapters (datu pieejas realizācija)