Гексагоналдык архитектура жана анын келип чыгышы жөнүндө айтып бериңиз.
sobes.tech AI
AIден жооп
Гексагоналдык архитектура (Ports and Adapters) — Алестер Коберн сунуштаган архитектуралык үлгү. Анын максаты — колдонмонун бизнес логикасынын негизин сыртка көз каранды болгондуктан бөлүп алуу (UI, маалыматтар базасы, үчүнчү тараптын кызматтары).
Түптөлүү:
Алестер Коберн бул концепцияны 2005-жылы сунуштаган. Негизги идея — бизнес логика көбүнесе инфраструктура катмары менен тыгыз байланышта болгон салттуу көпкатмарлуу архитектураларга жооп катары пайда болгон. Коберн бизнес логиканы өнүктүрүү жана сыноо процесстерин сыртка көз каранды болбой жүргүзүү мүмкүнчүлүгүн түзүүнү каалаган. "Гексагоналдык" деген аталыш колдонмонун ар кандай сырткы "адаптерлер" менен "порттор" аркылуу өз ара аракеттенүү мүмкүнчүлүгүн символдоштурат. Гексагоналдык архитектура — бул ар кандай системалар менен өз ара аракеттенүү үчүн жетиштүү "баштык" (порттор) бар абстракттуу фигура.
Негизги принциптери:
- Негиз (Core / Domain): таза бизнес логика жана домен объекттерин камтыйт. Ал сырткы технологияларга көз каранды эмес.
- Порттор (Ports): интерфейстер, алар негиз менен сырткы дүйнө ортосундагы өз ара аракеттенүүнү аныктайт. Эки түрү бар:
- Кирүүчү (Driving Ports): сырткы агенттер (мисалы, колдонуучу интерфейси же API) негиздин функцияларын кандайча чакыра алат деп аныктайт.
- Чыгуу (Driven Ports): негиз сырткы кызматтар менен кандайча өз ара аракеттенет деп аныктайт (мисалы, маалыматтар базасы же үчүнчү тарап API). Негиз бул интерфейстерди аныктайт, бирок ишке ашырбайт.
- Адаптерлер (Adapters): портторду ишке ашырат жана негиз менен сырткы элементтердин ортосунда көпүрө кызматын аткарат. Ички жана тышкы адаптерлердин эки түрү бар:
- Кирүүчү (Driving Adapters): сырткы агенттерден келген суроолорду негиз түшүнгөн форматка түрлендирет (мисалы, UI адаптер).
- Чыгуу (Driven Adapters): негизден чыккан чакырууларды сырткы кызматтар түшүнгөн форматка түрлендирет (мисалы, маалыматтар базасы адаптери).
Артыкчылыктары:
- Изоляция: Бизнес логика негизи сырткы технологияларга көз каранды эмес.
- Тестирлөө мүмкүнчүлүгү: Негиз көз карандысыз сыноо жүргүзүлө алат, бардык стек ишке киргизилбестен.
- Ийкемдүүлүк: Бир адаптерди башкасына оңой алмаштырып, негиз өзгөрбөйт (мисалы, бир маалыматтар базасынан экинчисине өтүү).
- Түзүлүшү: Төртүнчү бөлүктөр (негиз жана адаптерлер) көз карандысыз өнүктүрүлүп, өнүгө алат.
Фронтендде колдонуу:
Гексагоналдык архитектура көбүнесе бэкенд менен байланыштуу болсо да, анын принциптери фронтендде да колдонулушу мүмкүн, ал кардарлык колдонмону түзүүдө:
- Негиз: Бизнес логика жана колдонмонун абалы камтылган модулдар (мисалы, 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ге кирүүнүн ишке ашырылышы)