This project currently uses exceptions for business failures and IExceptionHandler for HTTP translation.
Result<T> is planned as a selective next step for expected business outcomes, while unexpected failures continue to use exceptions.
- Validation errors expected from business rules
- Not found scenarios that are part of normal control flow
- Conflict/forbidden outcomes expected by domain policy
- Infrastructure failures (database outage, network, serialization)
- Programming/runtime defects
- Any unexpected condition that should bubble to global exception handling
- Keep
ApiExceptionHandleras fallback for unknown errors. - Pilot
Result<T>inProductReviews(create/get/deletepaths). - Validate readability, test impact, and API contract consistency.
- Expand to other services only after the pilot stabilizes.