mirror of
https://github.com/OpenCut-app/OpenCut.git
synced 2026-07-13 21:52:53 +02:00
52 lines
1.3 KiB
Plaintext
52 lines
1.3 KiB
Plaintext
---
|
|||
|
|
alwaysApply: true
|
||
|
|
---
|
||
|
|
|
||
|
|
# Separation of Concerns
|
||
|
|
|
||
|
|
## Core Principle
|
||
|
|
|
||
|
|
Each file should have one single purpose/responsibility. Related functionality should be grouped together, unrelated functionality should be separated.
|
||
|
|
|
||
|
|
## Good Separation
|
||
|
|
|
||
|
|
- One file per major concern (auth, validation, data transformation)
|
||
|
|
- Group related utilities together
|
||
|
|
- Extract shared logic into dedicated files
|
||
|
|
- Keep API routes focused on their specific endpoint logic
|
||
|
|
|
||
|
|
Examples:
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
// ✅ Good: Each file has clear responsibility
|
||
|
|
/lib/rate-limit.ts // Rate limiting utilities
|
||
|
|
/lib/validation.ts // Input validation schemas
|
||
|
|
/lib/freesound-api.ts // External API integration
|
||
|
|
/api/sounds/search/route.ts // Route handler only
|
||
|
|
```
|
||
|
|
|
||
|
|
## Bad Mixing of Concerns
|
||
|
|
|
||
|
|
Avoid cramming multiple responsibilities into one file:
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
// ❌ Bad: Route file doing everything
|
||
|
|
/api/sounds/search/route.ts
|
||
|
|
- Rate limiting logic
|
||
|
|
- Validation schemas
|
||
|
|
- API transformation
|
||
|
|
- External API calls
|
||
|
|
- Response formatting
|
||
|
|
- Error handling utilities
|
||
|
|
```
|
||
|
|
|
||
|
|
## When to Separate
|
||
|
|
|
||
|
|
- File is getting long (>500 lines)
|
||
|
|
- Multiple distinct responsibilities in one file
|
||
|
|
- Logic could be reused elsewhere
|
||
|
|
- Complex utilities that distract from main purpose
|
||
|
|
|
||
|
|
## Rule
|
||
|
|
|
||
|
|
One file, one responsibility. Extract shared concerns into focused utility files
|