Son illərdə Hexagonal Architecture — yəni Ports & Adapters — böyük şi…
Kaan Baytan
Son illərdə Hexagonal Architecture — yəni Ports & Adapters — böyük şirkətlər arasında çox populyarlaşıb və bu, təsadüfi deyil. Gəlin qısa şəkildə niyə bu qədər yaxşı işlədiyinə baxaq.
Əvvəlcə qeyd edək ki, Hexagonal Architecture əsasən bir-birindən aydın şəkildə ayrılmış 3 qatdan ibarətdir:
1. Domain
Sistemin ürəyidir.
Burada bütün biznes məntiqi yerləşir və bu məntiq framework-lərdən, verilənlər bazalarından və API-lərdən tamamilə müstəqildir.
Domain daxilində adətən bunlar olur:
Entities — bəli, bunlar verilənlər bazasındakı entity-lər deyil
Value Objects — dəyişməz obyektlər
Biznes qaydaları
Domain Services
Xüsusi exception-lar
Əsas fikir: sistemin ən vacib hissəsi mümkün qədər saf və stabil qalmalıdır.
2. Application
Bu qat bir növ sistemin giriş-çıxışını idarə edən “nəzarətçi” rolunu oynayır.
Burada adətən bunlar yerləşir:
Use Case-lər
DTO-lar və Mappers
IN Ports — sistemə daxil olan əməliyyatlar
OUT Ports — infrastruktur qatına çıxan əməliyyatlar
Bu qat biznes məntiqini texniki detallarla qarışdırmağın qarşısını alır və sistemin strukturunu daha səliqəli saxlayır.
3. Infrastructure
Burada artıq bütün texniki detallar yerləşir:
Framework-lər
Verilənlər bazaları
Message Queue-lar
REST
GraphQL
SMTP
Xarici sistemlərlə inteqrasiyalar
Bu qat Adapter-ləri implement edir.
Adapter-lər sayəsində:
Domain qatına toxunmadan MySQL-dən MongoDB-yə keçmək olar
Xarici API-lərə sorğular göndərmək olar
Queue-lardan mesajlar qəbul etmək olar
Framework-lərlə işləmək mümkündür
Texniki detallar daxili biznes kodunu çirkləndirmir
Ports & Adapters yanaşması sayəsində Infrastructure ən çevik qatlardan birinə çevrilir.
hastagta ver
#HexagonalArchitecture #PortsAndAdapters #SoftwareArchitecture #CleanArchitecture #DomainDrivenDesign #DDD #BackendDevelopment #SoftwareEngineering #SystemDesign #DomainLayer #ApplicationLayer #InfrastructureLayer #UseCases #CleanCode #SOLID #Microservices #ModularMonolith #Backend #Programming #Developer #CodeQuality #MaintainableCode
