مقاله

چگونه وابستگی به Eloquent را محدود کنیم و کد را برای تست و تغییرات آینده آماده نگه داریم.

معماری لایه‌ای و Repository Pattern در PHP

معماری لایه‌ای و Repository Pattern در PHP

Repository Pattern در Laravel همیشه اجباری نیست، اما در پروژه‌هایی با چند منبع داده یا قوانین پیچیدهٔ دسترسی، ارزش خود را نشان می‌دهد.

لایه‌ها

  • HTTP: Controller، Request، Resource
  • Application: Service و Action classes
  • Domain: Model، Enum، Policy
  • Infrastructure: Repository، Job، Notification

Repository چه کاری انجام می‌دهد؟

Queryهای تکراری و فیلترهای مشترک (مثلاً published()) در یک جا متمرکز می‌شوند. Service به جای Model مستقیم، Repository را inject می‌کند.

تست‌پذیری

در تست Feature می‌توانید Repository را mock کنید یا از دیتابیس in-memory SQLite استفاده کنید بدون آنکه Controller را تغییر دهید.

اشتباهات رایج

ساخت Repository برای هر Model بدون منطق اضافه فقط boilerplate ایجاد می‌کند. وقتی فقط find و all دارید، همان Eloquent کافی است.

پایان

معماری باید مشکل واقعی حل کند. با نیاز پروژه شروع کنید و در صورت رشد، لایه‌ها را اضافه کنید — نه برعکس.