docs: add implementation plan, ADRs, and task tracking system
- Add comprehensive 8-phase implementation plan (docs/plan.md) - Add 28 Architecture Decision Records (docs/adr/) covering all phases - Add task tracking system with 283+ task files (docs/stories/) - Add task generator script for automated task file creation - Add reference playbooks and requirements documentation This commit establishes the complete planning foundation for the Go Platform implementation, documenting all architectural decisions and providing detailed task breakdown for Phases 0-8.
This commit is contained in:
49
docs/adr/0003-dependency-injection-framework.md
Normal file
49
docs/adr/0003-dependency-injection-framework.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# ADR-0003: Dependency Injection Framework
|
||||
|
||||
## Status
|
||||
Accepted
|
||||
|
||||
## Context
|
||||
The platform requires dependency injection to:
|
||||
- Manage service lifecycle
|
||||
- Wire dependencies between components
|
||||
- Support module system initialization
|
||||
- Handle graceful shutdown
|
||||
- Provide testability through dependency substitution
|
||||
|
||||
Options considered:
|
||||
1. **uber-go/fx** - Runtime dependency injection with lifecycle management
|
||||
2. **uber-go/dig** - Compile-time dependency injection
|
||||
3. **Manual constructor injection** - No framework, explicit wiring
|
||||
|
||||
## Decision
|
||||
Use **uber-go/fx** (v1.23.0+) as the dependency injection framework.
|
||||
|
||||
**Rationale:**
|
||||
- Provides lifecycle management (OnStart/OnStop hooks) crucial for services
|
||||
- Supports module-based architecture through fx.Option composition
|
||||
- Runtime dependency resolution with compile-time type safety
|
||||
- Excellent for modular monolith architecture
|
||||
- Well-documented and actively maintained
|
||||
- Used by major Go projects (Uber, etc.)
|
||||
|
||||
## Consequences
|
||||
|
||||
### Positive
|
||||
- Clean lifecycle management for services
|
||||
- Easy module composition via fx.Option
|
||||
- Graceful shutdown handling built-in
|
||||
- Test-friendly with fx.Options for test overrides
|
||||
|
||||
### Negative
|
||||
- Runtime reflection overhead (minimal)
|
||||
- Learning curve for developers unfamiliar with fx
|
||||
- Slightly more complex error messages on dependency resolution failures
|
||||
|
||||
### Implementation Notes
|
||||
- Install: `go get go.uber.org/fx@v1.23.0`
|
||||
- Create `internal/di/container.go` with fx.New()
|
||||
- Use fx.Provide() for service registration
|
||||
- Use fx.Invoke() for initialization tasks
|
||||
- Leverage fx.Lifecycle for service startup/shutdown
|
||||
|
||||
Reference in New Issue
Block a user