Heksagon memarlığı və onun mənşəyi haqqında danışın.
sobes.tech Süni İntellekt
AI-dan cavab
Heksagon memarlıq (Ports and Adapters) - Alister Kober tərəfindən təklif olunan memarlıq şablonudur. Bu, tətbiqin biznes məntiqi nüvəsini xarici asılılıqlardan (UI, verilənlər bazası, üçüncü tərəf xidmətləri) ayırmaq məqsədi daşıyır.
Mənbə:
Alister Kober 2005-ci ildə bu konsepsiyanı təqdim etmişdir. Əsas fikir ənənəvi çoxsəviyyəli memarlıq modellərinə cavab olaraq yaranmışdır, burada biznes məntiqi tez-tez infrastruktur səviyyəsi ilə sıx bağlı olurdu. Kober, biznes məntiqinin xarici dünya ilə necə qarşılıqlı əlaqədə olmasından asılı olmayaraq, onu inkişaf etdirmək və sınaqdan keçirmək imkanı verən memarlıq yaratmağa çalışmışdır. "Heksagon" adı, tətbiqin müxtəlif xarici "adapter" növləri ilə "portlar" vasitəsilə qarşılıqlı əlaqədə ola bilməsini simvolizə edir. Heksagon, müxtəlif sistemlərlə əlaqə qurmaq üçün kifayət qədər "fasilələr" (portlar) olan abstrakt fiqur kimi seçilmişdir.
Əsas prinsiplər:
- Nüvə (Core / Domain): Təmiz biznes məntiqi və domen obyektlərini ehtiva edir. Bu, xarici texnologiyalara bağlı deyil.
- Portlar (Ports): Nüvə ilə xarici dünya arasında qarşılıqlı əlaqəni müəyyən edən interfeyslər. İki növ port mövcuddur:
- Daxil olanlar (Driving Ports): Xarici agentlərin (məsələn, istifadəçi interfeysi və ya API) nüvənin funksiyalarını çağırmasına imkan verir.
- Xaric olanlar (Driven Ports): Nüvənin xarici xidmətlərlə necə qarşılıqlı əlaqədə olacağını müəyyən edir (məsələn, verilənlər bazası və ya üçüncü tərəf API-si). Bu interfeyslər nüvə tərəfindən müəyyən edilir, lakin həyata keçirilməz.
- Adapterlər (Adapters): Portları həyata keçirən və nüvə ilə xarici elementlər arasında körpü rolunu oynayan komponentlər. İki növ adapter mövcuddur:
- Daxil olanlar (Driving Adapters): Xarici agentlərin sorğularını nüvənin anlayacağı formata çevirir (məsələn, UI adapteri).
- Xaric olanlar (Driven Adapters): Nüvənin çağırışlarını xarici xidmətlərin anlayacağı formata çevirir (məsələn, verilənlər bazası adapteri).
Üstünlüklər:
- İzolasiya: Biznes məntiqi nüvəsi xarici texnologiyalardan asılı deyil.
- Test ediləbilərlik: Nüvənin müstəqil şəkildə test edilə bilməsi, bütün yığının işə salınmasına ehtiyac olmadan.
- Esneklik: Bir adapteri digərinə dəyişdirmək asandır və nüvəyə təsir etmir (məsələn, bir verilənlər bazasından digərinə keçid).
- Dəstəklənmə: Tətbiqin müxtəlif hissələri (nüvə və adapterlər) müstəqil şəkildə inkişaf etdirilə və təkamül edə bilər.
Frontend-də tətbiqi:
Heksagon memarlığı çox vaxt backend ilə əlaqələndirilir, lakin onun prinsipləri frontend-də də istifadə edilə bilər:
- Nüvə: Biznes məntiqi və tətbiq vəziyyətini ehtiva edən modullar (məsələn, Redux-reduktorlar, Zustand mağazası, DOM-ə bağlı olmayan təmiz komponentlər).
- Portlar: UI-nin məntiq ilə necə qarşılıqlı əlaqədə olduğunu və məntiqin xarici API və ya lokal saxlama ilə necə əlaqədə olduğunu müəyyən edən interfeyslər.
- Adapterlər: İstifadəçi girişini emal edən UI komponentləri (daxil olan adapterlər) və HTTP sorğuları və ya brauzer API-ləri ilə işləyən xidmətlər (xaric olan adapterlər).
Struktur nümunəsi (abstrakt):
📦 app
┣ 📂 core
┃ ┣ 📂 domain
┃ ┃ ┗ 📜 todos.ts // Todo obyektinin təsviri
┃ ┣ 📂 application
┃ ┃ ┗ 📜 todoService.ts // Todo ilə işləyən biznes məntiqi
┃ ┗ 📂 ports
┃ ┃ ┣ 📜 in/ITodoUseCase.ts // Daxil olan port (UI üçün interfeys)
┃ ┃ ┗ 📜 out/ITodoRepository.ts // Xaric olan port (məlumatlara giriş üçün interfeys)
┣ 📂 infra
┃ ┣ 📂 adapters
┃ ┃ ┣ 📂 in/reactUIAdapter.tsx // Daxil olan adapter (React komponenti)
┃ ┃ ┗ 📂 out/apiTodoRepository.ts // Xaric olan adapter (API-yə girişin həyata keçirilməsi)