Дар бораи меъмории гексагоналӣ ва пайдоиши он нақл кунед.
sobes.tech AI
Ҷавоб аз AI
Гексагональ архитектура (Ports and Adapters) — бұл Алестер Коберн ұсынған архитектуралық үлгі. Ол қолданбаның бизнес логикасының өзегін сыртқы тәуелділіктерден (UI, дерекқорлар, үшінші тарап қызметтері) оқшаулауға арналған.
Түпнұсқа:
Алестер Коберн 2005 жылы бұл тұжырымдаманы ұсынды. Негізгі идея дәстүрлі көпқабатты архитектураларға жауап ретінде пайда болды, онда бизнес логика жиі инфрақұрылым қабатымен тығыз байланысты болды. Коберн бизнес логиканы сыртқы әлеммен қалай өзара әрекеттессе де, оны дамыту және тестілеу мүмкіндігін беретін архитектура құруға ұмтылды. "Гексагональ" атауы қолданбаның әртүрлі сыртқы "адаптерлермен" өзара әрекеттесу мүмкіндігін білдіреді, олар "порттар" арқылы жүзеге асады. Гексагональ абстрактілі фигура ретінде таңдалды, ол әртүрлі жүйелермен өзара әрекеттесу үшін жеткілікті "бұрыштар" (порттар) бар.
Негізгі принциптері:
- Негіз (Core / Domain): Таза бизнес логика мен домен объектілерін қамтиды. Ол сыртқы технологияларға тәуелді емес.
- Порттар (Ports): Негіз бен сыртқы әлем арасындағы өзара әрекеттесуді анықтайтын интерфейстер. Екі типі бар:
- Кіретін (Driving Ports): Сыртқы агенттер (мысалы, пайдаланушы интерфейсі немесе API) қалай негізгі функцияларды шақыра алатынын анықтайды.
- Шығатын (Driven Ports): Негіз сыртқы қызметтермен қалай өзара әрекеттесе алатынын анықтайды (мысалы, дерекқор немесе үшінші тарап API). Негіз бұл интерфейстерді анықтайды, бірақ жүзеге асырмайды.
- Адаптерлер (Adapters): Порттарды жүзеге асырады және негізгі мен сыртқы элементтер арасында көпір қызметін атқарады. Екі типі бар:
- Кіретін (Driving Adapters): Сыртқы агенттердің сұрауларын негізгі түсінетін форматқа түрлендіреді (мысалы, UI адаптері).
- Шығатын (Driven Adapters): Негіздегі шақыруларды сыртқы қызметтер түсінетін форматқа түрлендіреді (мысалы, дерекқор адаптері).
Артықшылықтары:
- О isolяция: Бизнес логика негізі сыртқы технологияларға тәуелді емес.
- Тестілеу мүмкіндігі: Негіз тәуелсіз тестілеуге болады, барлық стек іске қосылмай-ақ.
- Икемділік: Бір адаптерді басқаға оңай ауыстыруға болады, негізгі өзгермейді (мысалы, бір дерекқордан басқаға көшу).
- Ұзақ мерзімділік: Қолданбаның әртүрлі бөліктері (негіз және адаптерлер) тәуелсіз дамып, эволюциялана алады.
Фронтендте қолдану:
Гексагональды архитектура көбінесе бэкендпен байланысты болса да, оның принциптері фронтендте де қолданылуы мүмкін, ол клиенттік қолданбаны құрылымдауда:
- Негіз: Бизнес логика мен қолданба күйін қамтитын модульдер (мысалы, Redux редукторлары, Zustand дүкені, DOM-ға тәуелсіз таза логикасы бар компоненттер).
- Порттар: UI-дің логикамен қалай өзара әрекеттесетінін анықтайтын интерфейстер (кіріс), және логиканың сыртқы API-лар немесе жергілікті сақтау құралдарымен қалай өзара әрекеттесетінін анықтайтын интерфейстер (шығыс).
- Адаптерлер: UI компоненттері, олар пайдаланушы енгізуін өңдейді және порттарды шақырады (кіріс адаптерлері), және қызметтер, олар HTTP сұрауларын орындайды немесе браузер API-ларымен жұмыс істейді (мысалы, localStorage) (шығыс адаптерлері).
Құрылымның мысалы (абстрактілі):
📦 app
┣ 📂 core
┃ ┣ 📂 domain
┃ ┃ ┗ 📜 todos.ts // Todo объектінің сипаттамасы
┃ ┣ 📂 application
┃ ┃ ┗ 📜 todoService.ts // Todo-мен жұмыс істейтін бизнес логика
┃ ┗ 📂 ports
┃ ┃ ┣ 📜 in/ITodoUseCase.ts // Кіріс порты (UI үшін интерфейс)
┃ ┃ ┗ 📜 out/ITodoRepository.ts // Шығыс порты (деректерге қол жеткізу интерфейсі)
┣ 📂 infra
┃ ┣ 📂 adapters
┃ ┃ ┣ 📂 in/reactUIAdapter.tsx // Кіріс адаптері (React компоненті)
┃ ┃ ┗ 📂 out/apiTodoRepository.ts // Шығыс адаптері (API-ға қол жеткізуді жүзеге асыру)