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 танҳо ба қоидаҳои бизнес тамаркуз мекунад.
- Тартиби масъулиятҳо: Меъёри масъулиятҳоро равшан ҷудо мекунад.
Пайванд бо Frontend:
Дар архитектураи frontend, портҳо ва адаптерҳо барои:
- Тартиби логикаи бизнеси компонент аз манбаъҳои маълумот: Компонент бо "порт" (интерфейс) алоқа мекунад, ки метавонад аз ҷониби "адаптер"ҳои гуногун иҷро шавад (аз 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();