Estado: Superseded by ADR-005 and ADR-006
Fecha: 2025-11-14
Decisores: Equipo de Arquitectura
Superseded Date: 2025-11-14
Nota: Esta decisión fue reemplazada. Para compartir código usaremos:
- Frontend: npm packages para componentes React compartidos
- Backend: Python packages (pip/poetry) para código compartido entre microservicios
Necesitamos una forma de compartir código, componentes y contratos entre microservicios sin crear acoplamiento directo. El código compartido debe ser versionado, reutilizable y mantenible.
Utilizaremos BIT como plataforma de componentes para gestionar y compartir código común entre microservicios.
- Componentes Independientes: Cada componente es independiente y versionado
- Reutilización: Compartir código sin duplicación
- Versionado Semántico: Control preciso de versiones
- Desarrollo Aislado: Componentes desarrollados y testeados aisladamente
- Descubrimiento: Facilita descubrir componentes existentes
- CI/CD Integration: Integración con pipelines de despliegue
- Curva de Aprendizaje: Equipo debe aprender BIT
- Complejidad: Infraestructura adicional (BIT server)
- Dependencias: Gestión de versiones de dependencias
- Overhead: Proceso adicional para crear/publicar componentes
- Rechazado: Acoplamiento temporal (todos actualizan a la vez)
- Dificulta versionado independiente
- Builds lentos
- Considerado: Buena opción pero menos flexible
- No facilita tanto el desarrollo aislado
- BIT ofrece mejores herramientas de desarrollo
- Rechazado: Duplicación, mantenimiento pesadilla
- Sin versionado
- Inconsistencias
- Componentes reusables entre todos los servicios
- Versionado independiente de cada componente
- Testing aislado de componentes
- Facilita extraer funcionalidad común
- Documentación centralizada de componentes
- Setup inicial de BIT infrastructure
- Aprendizaje de nuevas herramientas
- Proceso de publicación de componentes
- Gestión de breaking changes
bit-components/
├── contracts/
│ ├── events/ # Schemas de eventos
│ ├── commands/ # Schemas de comandos
│ └── dtos/ # Data Transfer Objects
├── infrastructure/
│ ├── event-bus/ # Abstracciones de mensajería
│ ├── logging/ # Configuración de logging
│ ├── health-checks/ # Health check utilities
│ └── resilience/ # Circuit breakers, retries
├── domain/
│ ├── value-objects/ # Value objects compartidos
│ └── exceptions/ # Excepciones de dominio
└── testing/
├── fixtures/ # Test fixtures
└── helpers/ # Test helpers
- Scope:
@company-name/component-name - Versionado: Semver estricto (major.minor.patch)
- Tags: Para categorización y búsqueda
@company/contracts.events.orders
@company/contracts.events.payments
@company/contracts.events.inventory
@company/contracts.events.notifications
Contienen:
- Schemas de eventos
- Versiones de eventos
- Documentación
@company/infrastructure.event-bus
Contiene:
- IEventPublisher interface
- IEventConsumer interface
- Implementaciones para RabbitMQ/Azure Service Bus
- Configuración
@company/infrastructure.logging
Contiene:
- Configuración Serilog
- Enrichers personalizados
- Correlation ID handling
@company/contracts.dtos.common
Contiene:
- PagedResult
- ApiResponse
- ErrorDetails
- Validation result models
- Inicializar componente BIT
- Desarrollar y testear localmente
- Versionar según semver
- Publicar a BIT server
- Consumir en microservicios
- Hacer cambios en componente
- Incrementar versión (major si breaking change)
- Documentar cambios en CHANGELOG
- Publicar nueva versión
- Actualizar servicios gradualmente
- Incrementar major version
- Mantener versión anterior por período de deprecación
- Documentar migración
- Comunicar a todos los equipos
- MAJOR: Breaking changes
- MINOR: Nuevas features backwards compatible
- PATCH: Bug fixes
- Marcar como deprecated en código
- Mantener por al menos 2 major versions
- Logging de warnings cuando se usa deprecated code
- Unit tests requeridos para todos los componentes
- Integration tests cuando aplique
- CI pipeline para validar antes de publicar
- Contract tests para event schemas
Cada componente debe tener:
- README.md con descripción y ejemplos
- API documentation (JSDoc/XML comments)
- CHANGELOG.md
- Migration guides para breaking changes
- Cada componente tiene un owner/team responsable
- Code reviews requeridos antes de publicar
- Architecture review para nuevos componentes
- Solo CI/CD puede publicar a producción
- Tags para environments (dev, staging, prod)
- Approval process para cambios major