1.8 KiB
1.8 KiB
Dependency Injection
- Prefer Angular dependency injection for application services.
- Keep injected dependencies minimal.
- Avoid service locator patterns.
- Prefer
inject()where it improves readability and is consistent with the project. - Do not inject services that are not used.
- Scope services intentionally.
- Prefer application-wide singletons only for truly shared stateless or coordinated state.
- Avoid storing request-specific or component-specific mutable state in root services.
- Use injection tokens for configuration or abstractions where appropriate.
- Do not create interfaces only to satisfy dependency injection when no abstraction is needed.
Services
- Keep services focused on a clear responsibility.
- Avoid large catch-all services.
- Separate API access, domain logic and UI state where practical.
- Avoid leaking transport models throughout the application.
- Do not expose mutable internal state directly.
- Prefer readonly APIs for state consumers.
- Avoid hidden side effects.
- Keep service methods predictable.
- Do not use services merely to move poorly structured component code elsewhere.
HTTP and APIs
- Keep API access centralized and strongly typed.
- Prefer dedicated API clients or data-access services.
- Do not use
anyfor API responses. - Treat all server responses as untrusted at runtime.
- Validate external data when the contract is security- or correctness-critical.
- Keep DTOs separate from domain models when their responsibilities differ.
- Avoid duplicate API calls.
- Cache only when the invalidation strategy is clear.
- Avoid manual URL string construction when typed helpers or centralized endpoints are available.
- Use interceptors only for cross-cutting concerns.
- Do not put unrelated business logic into HTTP interceptors.
- Handle cancellation where appropriate.
- Handle expected error states explicitly.