Service Pattern
Service محل پیادهسازی business logic است، نه جایگزین controller یا repository.
مسئولیت Service
- اجرای use case
- enforce کردن business rule
- هماهنگ کردن چند repository یا model
- اجرای transaction در عملیات چندنوشتنی
- پرتاب exception معنیدار domain
موارد ممنوع
- دسترسی مستقیم به
request()داخل service - ساخت response داخل service
- وابستگی به session یا frontend
- validation خام input
- مخلوط کردن query پیچیده و orchestration سنگین در یک method
ورودی و خروجی
ورودی service باید explicit باشد:
- scalarهای validate شده
- DTO
- model مشخص
- value object
خروجی service باید domain result باشد، نه response HTTP.