refactor(rules): split wpf.md into index + references
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
29d26b0918
commit
a2b9a9f5c4
8 files changed
+382
-375
No files matched your search
@@ -0,0 +1,82 @@
|
||||
## Architecture
|
||||
|
||||
* Keep presentation, application, domain and infrastructure concerns separated.
|
||||
* Avoid direct database access from views or ViewModels.
|
||||
* Avoid direct HTTP access from controls.
|
||||
* Keep external integrations behind focused services.
|
||||
* Avoid circular dependencies.
|
||||
* Keep feature boundaries clear.
|
||||
* Do not create shared utility classes for unrelated functionality.
|
||||
* Keep shared code genuinely reusable.
|
||||
* Minimize global state.
|
||||
* Avoid static service access.
|
||||
|
||||
## Dependency Injection
|
||||
|
||||
* Use dependency injection where lifecycle management, substitution or testability benefits from it.
|
||||
* Avoid service locator patterns.
|
||||
* Keep constructor dependencies minimal.
|
||||
* Do not inject dependencies that are not used.
|
||||
* Choose service lifetimes intentionally.
|
||||
* Do not make stateful services global without a concrete reason.
|
||||
* Avoid introducing interfaces solely for dependency injection when no abstraction is needed.
|
||||
|
||||
## Testing
|
||||
|
||||
* Keep ViewModels testable without a UI thread where practical.
|
||||
* Test behavior rather than implementation details.
|
||||
* Test domain and application logic independently from WPF.
|
||||
* Avoid brittle tests coupled to XAML structure.
|
||||
* Keep UI automation tests focused on critical flows.
|
||||
* Mock external boundaries rather than internal details.
|
||||
* Keep tests deterministic.
|
||||
* Avoid real network, database or filesystem dependencies in unit tests unless explicitly intended.
|
||||
|
||||
## Code Quality
|
||||
|
||||
* Use nullable reference types.
|
||||
* Prefer modern, readable C# syntax.
|
||||
* Avoid unnecessary interfaces and abstractions.
|
||||
* Prefer concrete types where no abstraction is required.
|
||||
* Use descriptive names.
|
||||
* Remove dead code.
|
||||
* Remove commented-out code.
|
||||
* Do not add comments unless the user explicitly requests them.
|
||||
* Treat compiler, analyzer and binding warnings seriously.
|
||||
* Do not suppress warnings without a concrete reason.
|
||||
* Prefer correctness, responsiveness, security and maintainability over cleverness.
|
||||
|
||||
## Performance
|
||||
|
||||
* Keep the UI thread responsive.
|
||||
* Minimize visual tree depth.
|
||||
* Keep virtualization enabled.
|
||||
* Avoid unnecessary bindings.
|
||||
* Avoid unnecessary converters.
|
||||
* Avoid unnecessary resource lookups.
|
||||
* Avoid unnecessary property change notifications.
|
||||
* Avoid frequent full collection refreshes.
|
||||
* Avoid loading large datasets eagerly.
|
||||
* Avoid loading large images at full resolution when unnecessary.
|
||||
* Freeze `Freezable` objects where practical.
|
||||
* Reuse immutable resources where appropriate.
|
||||
* Avoid unnecessary animations.
|
||||
* Avoid high-frequency timers on the UI thread.
|
||||
* Measure startup time, UI responsiveness, memory usage and rendering performance before micro-optimizing.
|
||||
|
||||
## Performance Priority
|
||||
|
||||
Prioritize WPF performance work in this order:
|
||||
|
||||
* UI architecture
|
||||
* UI thread blocking
|
||||
* Data loading and I/O
|
||||
* Virtualization
|
||||
* Visual tree complexity
|
||||
* Binding and notification frequency
|
||||
* Rendering and images
|
||||
* Memory retention and leaks
|
||||
* Allocations
|
||||
* CPU micro-optimizations
|
||||
|
||||
Never optimize based purely on assumptions.
|
||||
Reference in new issue
Block a user