Sobes.tech
Senior

Порттор жана адаптерлердин архитектурасы жөнүндө эмне билесиз?

sobes.tech AI

AIден жооп

Порттор жана адаптерлердин архитектурасы, ошондой эле гексагоналдык архитектура (Hexagonal Architecture) деп аталат, колдонмонун предметтик логикасы (Core) сырткы көзкарандылыктардан (пайдалануу интерфейстер, маалымат базалары, тышкы кызматтар) бөлүнөт.

Негизги концепциялар:

  • Порттор: Алар интерфейстерди аныктайт, алардын аркылуу Core тышкы дүйнө менен өз ара аракеттенет. Порттор эки түргө бөлүнөт:
    • Кирүү (Driving Ports): Тышкы субъекттер тарабынан Core функцияларын чакырууга колдонулат (мисалы, API-интерфейс).
    • Чыгуу (Driven Ports): Core тарабынан тышкы субъекттердин функцияларын чакырууга колдонулат (мисалы, маалыматка жетүү үчүн репозиторий интерфейси).
  • Адаптерлер: Алар портторду ишке ашырып, Core менен конкреттүү тышкы технологиялар же фреймворктөрдү байланыштырат:
    • Кирүү (Driving Adapters): Кирүү портторун ишке ашырып, тышкы чөйрөдөн келген суроолорду Core чакырууларына айлантат, мисалы, REST-контроллер.
    • Чыгуу (Driven Adapters): Чыгуу портторун ишке ашырып, Coreден чыккан чакырууларды тышкы чөйрө менен өз ара аракеттенүү үчүн айлантат, мисалы, конкреттүү маалымат базасы менен иштөө үчүн репозиторийдин ишке ашырылышы.
  • Core (Предметтик аймак): колдонмонун бизнес-логикасын камтыйт. Ал толугу менен тышкы деталдардан изоляцияланган жана алар менен гана порттор аркылуу өз ара аракеттенет.

Артыкчылыктары:

  • Тестирлөө мүмкүнчүлүгү: Coreдин изоляциясы бизнес-логиканы бирдиктүү тестирлөөнү жеңилдетет, кыйынчылык туудурган тышкы көзкарандылыктарды мокалоого муктаждык жок.
  • Ийкемдүүлүк: Жаңы тышкы технологияларды (маалымат базалары, фреймворктөр) оңой алмаштыруу же кошуу мүмкүнчүлүгүн берет, Core өзгөртүүнү талап кылбайт. Жаңы адаптер жазуу жетиштүү.
  • Таза код: Кодуңузду таза жана оңой колдоого алынып турган кылат, Core гана бизнес эрежелерине көңүл бурат.
  • Жоопкерчилик бөлүштүрүү: Ачык-айкын жоопкерчилик аймактарын бөлөт.

Фронтенд менен байланыш:

Фронтендде порттор жана адаптерлер архитектурасы колдонулат:

  • Бизнес-логика жана маалымат бууларынын бөлүнүшү: Компонент "порт" (интерфейс) менен өз ара аракеттенет, ал ар кандай "адаптерлер" (API, Local Storage, тест моктору жана башка) аркылуу ишке ашырылат.
  • Тышкы окуяларды иштетүү: Кирүү порттору UI окуяларын иштетүүчү катары кызмат кылышы мүмкүн, ал эми адаптерлер бул окуяларды ички логика чакырууларына айлантат.
  • Тышкы китепканалар менен өз ара аракеттенүүнү инкапсуляциялоо: Адаптерлер тышкы китепканаларга кайрылууларды капсулдаштырып, Core үчүн жөнөкөй жана туруктуу интерфейс камсыздайт.

JavaScript мисалы (схема):

// Чыгуу порту мисалы (маалымат алуу интерфейси)
class DataGateway {
  getData() {
    throw new Error("getData методу ишке ашырылышы керек");
  }
}

// Чыгуу адаптери мисалы (API үчүн)
class ApiDataGateway extends DataGateway {
  async getData() {
    const response = await fetch('/api/data');
    return response.json();
  }
}

// Кирүү порту мисалы (бизнес-логика үчүн)
class BusinessLogicPort {
  constructor(dataGateway) {
    this.dataGateway = dataGateway;
  }

  async processData() {
    throw new Error("processData методу ишке ашырылышы керек");
  }
}

// Core мисалы (бизнес-логика)
class MyBusinessLogic extends BusinessLogicPort {
  async processData() {
    const data = await this.dataGateway.getData();
    // Түзүмдүн иштөө логикасы
    console.log("Данилер иштетилди:", data);
    return data;
  }
}

// Кирүү адаптери мисалы (UIда колдонуу)
async function initApp() {
  const apiGateway = new ApiDataGateway(); // конкреттүү адаптер
  const businessLogic = new MyBusinessLogic(apiGateway); // Core портту колдонуп жатат
  await businessLogic.processData(); // Кирүү адаптери Core-ду чакырат
}

initApp();