Ports و Adapters¶
الگویی که دامین شما را از زیرساخت مستقل نگه میدارد.
Ports (اینترفیسها)¶
تعریف میکنند دامین شما به چه چیزی نیاز دارد، نه چگونه.
# internal/ports/order_repository.py
from abc import ABC, abstractmethod
class OrderRepository(ABC):
@abstractmethod
async def get_by_id(self, id: UUID) -> Optional[Order]:
pass
@abstractmethod
async def save(self, order: Order) -> Order:
pass
Adapters (پیادهسازیها)¶
پیادهسازی میکنند چگونه اینترفیس را برآورده کنند.
# internal/adapters/postgres_order_repository.py
class PostgresOrderRepository(OrderRepository):
def __init__(self, session):
self.session = session
async def get_by_id(self, id: UUID) -> Optional[Order]:
result = await self.session.execute(...)
return self._to_entity(model) if model else None
چرا این الگو؟¶
| مزیت | توضیحات |
|---|---|
| 🧪 قابل تست | Mock کردن adapters برای unit test |
| 🔄 قابل تعویض | تغییر DB بدون تغییر منطق |
| 🧹 تمیز | دامین چیزی از SQL نمیداند |