mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-04-26 09:16:22 +02:00
feat: modify architecture examples and scaling checklist to system architecture skill
This commit is contained in:
parent
b22fe012d5
commit
056d3c456b
3 changed files with 302 additions and 183 deletions
120
.cursor/skills/system-architecture/examples.md
Normal file
120
.cursor/skills/system-architecture/examples.md
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
# Architecture Examples
|
||||
|
||||
Concrete good/bad examples for each core principle in SKILL.md.
|
||||
|
||||
---
|
||||
|
||||
## Boundaries at Real Differences
|
||||
|
||||
**Good** - Meaningful boundary:
|
||||
```
|
||||
# Users and Billing are separate bounded contexts
|
||||
# - Different teams own them
|
||||
# - Different change cadences (users: weekly, billing: quarterly)
|
||||
# - Different compliance requirements
|
||||
|
||||
src/
|
||||
users/ # User management domain
|
||||
models.py
|
||||
services.py
|
||||
api.py
|
||||
billing/ # Billing domain
|
||||
models.py
|
||||
services.py
|
||||
api.py
|
||||
shared/ # Truly shared utilities
|
||||
auth.py
|
||||
```
|
||||
|
||||
**Bad** - Ceremony without purpose:
|
||||
```
|
||||
# UserService → UserRepository → UserRepositoryImpl
|
||||
# ...when you'll never swap the database
|
||||
|
||||
src/
|
||||
interfaces/
|
||||
IUserRepository.py # One implementation exists
|
||||
repositories/
|
||||
UserRepositoryImpl.py # Wraps SQLAlchemy, which is already a repository
|
||||
services/
|
||||
UserService.py # Just calls the repository
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Dependencies Flow Inward
|
||||
|
||||
**Good** - Clear dependency direction:
|
||||
```
|
||||
# Dependency flows inward: infrastructure → application → domain
|
||||
|
||||
domain/ # Pure business logic, no imports from outer layers
|
||||
order.py # Order entity with business rules
|
||||
|
||||
application/ # Use cases, orchestrates domain
|
||||
place_order.py # Imports from domain/, not infrastructure/
|
||||
|
||||
infrastructure/ # External concerns
|
||||
postgres.py # Implements persistence, imports from application/
|
||||
stripe.py # Implements payments
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Follow the Data
|
||||
|
||||
**Good** - Obvious data flow:
|
||||
```
|
||||
Request → Validate → Transform → Store → Respond
|
||||
|
||||
# Each step is a clear function/module:
|
||||
api/routes.py # Request enters
|
||||
validators.py # Validation
|
||||
transformers.py # Business logic transformation
|
||||
repositories.py # Storage
|
||||
serializers.py # Response shaping
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Design for Failure
|
||||
|
||||
**Good** - Failure-aware design with compensation:
|
||||
```python
|
||||
class OrderService:
|
||||
def place_order(self, order: Order) -> Result:
|
||||
inventory = self.inventory.reserve(order.items)
|
||||
if inventory.failed:
|
||||
return Result.failure("Items unavailable", retry=False)
|
||||
|
||||
payment = self.payments.charge(order.total)
|
||||
if payment.failed:
|
||||
self.inventory.release(inventory.reservation_id) # Compensate
|
||||
return Result.failure("Payment failed", retry=True)
|
||||
|
||||
return Result.success(order)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Design for Operations
|
||||
|
||||
**Good** - Observable architecture:
|
||||
```python
|
||||
@trace
|
||||
def handle_request(request):
|
||||
log.info("Processing", request_id=request.id, user=request.user_id)
|
||||
try:
|
||||
result = process(request)
|
||||
log.info("Completed", request_id=request.id, result=result.status)
|
||||
return result
|
||||
except Exception as e:
|
||||
log.error("Failed", request_id=request.id, error=str(e),
|
||||
context=request.to_dict()) # Full context for replay
|
||||
raise
|
||||
```
|
||||
|
||||
Key elements:
|
||||
- Every request gets a correlation ID
|
||||
- Every service logs with that ID
|
||||
- Every error includes full context for reproduction
|
||||
Loading…
Add table
Add a link
Reference in a new issue