25 lines
1.1 KiB
Markdown
25 lines
1.1 KiB
Markdown
## Forms
|
|
|
|
* Prefer reactive forms for non-trivial forms.
|
|
* Keep forms strongly typed.
|
|
* Avoid untyped forms.
|
|
* Keep validation rules centralized and reusable where practical.
|
|
* Validate on both client and server where required.
|
|
* Never treat client-side validation as a security boundary.
|
|
* Keep form state separate from domain state when useful.
|
|
* Avoid large components that combine layout, validation, persistence and business logic.
|
|
* Display validation errors consistently.
|
|
* Preserve user input when recoverable errors occur.
|
|
|
|
## Routing
|
|
|
|
* Keep route definitions explicit and predictable.
|
|
* Prefer lazy loading for larger feature areas.
|
|
* Avoid loading large feature bundles eagerly without need.
|
|
* Use route guards only for navigation behavior, not as a security boundary.
|
|
* Authorization must still be enforced on the backend.
|
|
* Keep resolvers focused.
|
|
* Avoid expensive work during navigation unless required.
|
|
* Keep route parameters strongly typed at application boundaries where practical.
|
|
* Do not rely on client-side routing state for sensitive authorization decisions.
|