Guía de Estilos - NSaldarriagaV/Ctrl-Store GitHub Wiki
Guía de Estilo y Reglas de Programación
Proyecto: Ctrl+Store
1) Guía de estilo de codificación (inventada para el proyecto)
1.1 Principios generales
- Legibilidad > ingenio: prioriza código claro y explícito.
- Consistencia: si hay varias formas correctas, usa la del proyecto.
- “Thin Views, Fat Services”: vistas delgadas, la lógica de negocio vive en services/.
- Inmutabilidad por defecto: evita mutar estructuras salvo que sea necesario.
- Idempotencia en operaciones críticas (pagos, generación de factura).
1.2 Formato y herramientas
- Formateo:
black(línea 100), imports:isort, lint:ruff, tipado:mypy. - Nombres:
- módulos/paquetes:
snake_case; clases:PascalCase; funciones/variables:snake_case; - constantes:
UPPER_SNAKE; templates:kebab-case.html.
- módulos/paquetes:
- Commits Git:
tipo(scope): resumen(feat, fix, refactor, test, docs, chore).
1.3 Organización del proyecto
ctrlstore/ settings/ apps/ auth/ catalog/ cart/ order/ payment/ billing/ analytics/ common/
- No mezclar responsabilidades entre apps.
- settings 12-factor: variables sensibles por entorno, nunca en repo.
1.4 Tipos y errores
- Tipado con mypy.
- Usa dataclasses o TypedDict.
- Errores de negocio → excepciones propias (
PaymentError,StockError).
2) Reglas esenciales por categoría
2.1 Rutas (urls)
- Toda ruta debe estar asociada a un View.
- Usa namespaces (
app_name). - Nombres consistentes:
catalog:product_detail. - Nunca hardcodear URLs en templates.
- Agrupar rutas en cada app.
- Usar
reverse_lazyen redirecciones.
2.2 Vistas (controllers)
- Preferir Class Based Views para CRUD.
- Mantener vistas delgadas.
- Autenticación y permisos claros.
- Contexto mínimo y explícito.
- Respuestas correctas: 404, 403, 400.
- Evitar N+1 queries.
- Paginación obligatoria en listados.
- CSRF activo en POST.
2.3 Modelos
- Dinero → DecimalField.
- Implementar
__str__y constraints. - Validación en
clean(). - Operaciones críticas en
transaction.atomic(). - QuerySets personalizados.
- Índices en campos clave.
- Signals con moderación.
2.4 Formularios / Serializers
- Validación en formularios, no en vistas.
- Errores claros.
- Nunca guardar datos sensibles de tarjeta.
- Validadores centralizados.
2.5 Templates
- Todas las vistas extienden
base.html. - Templates siempre en HTML.
- Nada de lógica de negocio.
- Accesibilidad básica.
- CSS organizados en
static/.
2.6 Servicios
- Lógica pesada en
services/. - Idempotencia obligatoria.
2.7 Seguridad
- CSRF siempre activo.
- Escapar variables → evitar XSS.
- Passwords con algoritmos fuertes.
- Permisos de objeto: un cliente solo ve lo suyo.
2.8 Observabilidad
- Logging estructurado.
- Logs con user_id, order_id, payment_id.
2.9 Migraciones y datos
- Una migración por cambio de modelo.
3) Reglas esenciales (resumen)
- Toda ruta tiene View.
- Toda vista extiende
base.html. - Todos los templates son HTML.
- Precios con Decimal.
- Vistas delgadas, lógica en services.
- Operaciones críticas en transacción.
- Pagos y facturas idempotentes.
- Logs estructurados con IDs de negocio.