Initial commit
This commit is contained in:
160
skills/codebase-patterns.md
Normal file
160
skills/codebase-patterns.md
Normal file
@@ -0,0 +1,160 @@
|
||||
---
|
||||
name: codebase-patterns
|
||||
description: Common codebase patterns, anti-patterns, and architectural conventions. Auto-loaded when analyzing code structure or discussing architecture.
|
||||
---
|
||||
|
||||
# Common Codebase Patterns
|
||||
|
||||
## Architecture Patterns
|
||||
|
||||
### MVC (Model-View-Controller)
|
||||
- **Models**: Data and business logic
|
||||
- **Views**: UI/presentation layer
|
||||
- **Controllers**: Handle requests, coordinate models/views
|
||||
- Common in: Rails, Django, Laravel, ASP.NET MVC
|
||||
|
||||
### Layered Architecture
|
||||
- **Presentation**: UI components
|
||||
- **Business Logic**: Core application logic
|
||||
- **Data Access**: Database interactions
|
||||
- **Common separation**: `/controllers`, `/services`, `/repositories`
|
||||
|
||||
### Microservices
|
||||
- Independent services with own databases
|
||||
- Communication via REST/gRPC/message queues
|
||||
- Look for: Docker, Kubernetes configs, service directories
|
||||
|
||||
### Repository Pattern
|
||||
```
|
||||
/repositories
|
||||
- UserRepository.ts
|
||||
- ProductRepository.ts
|
||||
```
|
||||
Abstracts data access logic
|
||||
|
||||
### Service Layer Pattern
|
||||
```
|
||||
/services
|
||||
- AuthService.ts
|
||||
- PaymentService.ts
|
||||
```
|
||||
Business logic separation from controllers
|
||||
|
||||
## Common Anti-Patterns
|
||||
|
||||
### God Class/Object
|
||||
- Class with too many responsibilities
|
||||
- **Signs**: 500+ lines, handles everything
|
||||
- **Fix**: Split into smaller, focused classes
|
||||
|
||||
### Spaghetti Code
|
||||
- Complex, tangled dependencies
|
||||
- **Signs**: Hard to follow flow, circular dependencies
|
||||
- **Fix**: Refactor to clear dependencies
|
||||
|
||||
### Magic Numbers/Strings
|
||||
```javascript
|
||||
// Bad
|
||||
if (status === 1) { }
|
||||
|
||||
// Good
|
||||
const STATUS_ACTIVE = 1;
|
||||
if (status === STATUS_ACTIVE) { }
|
||||
```
|
||||
|
||||
### N+1 Query Problem
|
||||
```python
|
||||
# Bad - N+1 queries
|
||||
for user in users:
|
||||
user.posts # Separate query for each user
|
||||
|
||||
# Good - Single query
|
||||
users = User.objects.prefetch_related('posts')
|
||||
```
|
||||
|
||||
## File Organization Patterns
|
||||
|
||||
### Feature-based
|
||||
```
|
||||
/features
|
||||
/auth
|
||||
- login.ts
|
||||
- signup.ts
|
||||
/dashboard
|
||||
- dashboard.ts
|
||||
```
|
||||
|
||||
### Layer-based
|
||||
```
|
||||
/controllers
|
||||
/models
|
||||
/views
|
||||
/services
|
||||
```
|
||||
|
||||
### Domain-driven Design
|
||||
```
|
||||
/domain
|
||||
/user
|
||||
/order
|
||||
/payment
|
||||
```
|
||||
|
||||
## Naming Conventions
|
||||
|
||||
### Functions
|
||||
- **JavaScript/TypeScript**: `camelCase` - `getUserById()`
|
||||
- **Python**: `snake_case` - `get_user_by_id()`
|
||||
- **Go**: `PascalCase` for exported - `GetUserByID()`
|
||||
|
||||
### Classes
|
||||
- **All languages**: `PascalCase` - `UserController`, `PaymentService`
|
||||
|
||||
### Constants
|
||||
- **All languages**: `SCREAMING_SNAKE_CASE` - `MAX_RETRIES`, `API_URL`
|
||||
|
||||
### Files
|
||||
- **React**: `PascalCase.tsx` - `UserProfile.tsx`
|
||||
- **Others**: `kebab-case` or `snake_case` - `user-service.ts`
|
||||
|
||||
## Common Directory Structures
|
||||
|
||||
### React/Next.js
|
||||
```
|
||||
/app or /pages
|
||||
/components
|
||||
/lib or /utils
|
||||
/hooks
|
||||
/styles
|
||||
/public
|
||||
```
|
||||
|
||||
### Express/Node
|
||||
```
|
||||
/routes
|
||||
/controllers
|
||||
/models
|
||||
/middleware
|
||||
/services
|
||||
/config
|
||||
```
|
||||
|
||||
### Django
|
||||
```
|
||||
/app_name
|
||||
/models
|
||||
/views
|
||||
/templates
|
||||
/migrations
|
||||
```
|
||||
|
||||
### Go
|
||||
```
|
||||
/cmd
|
||||
/internal
|
||||
/pkg
|
||||
/api
|
||||
/configs
|
||||
```
|
||||
|
||||
Use these patterns to quickly understand and navigate unfamiliar codebases.
|
||||
Reference in New Issue
Block a user