1.2 KiB
1.2 KiB
OVERVIEW Scaffold for 14 high‑complexity use cases with strict interfaces and DI.
WHERE TO LOOK
- usecase/ directory for interfaces and New{Entity}UseCase constructors
- repository/ for repository interfaces consumed by use cases
- model/ for DTOs and domain entities used by use cases
- manager/ for DI wiring examples (injecting GeocodingService)
- config/ or utils/ for validator setup references invoked by use cases
CONVENTIONS
- Use case interfaces define all methods for an entity
- Constructor: New{Entity}UseCase(repo, geocoder) returns {Entity}UseCase interface
- Validation uses validator.New() inside use cases
- GeocodingService is injected via dependency injection (not instantiated in use cases)
- File naming uses snake_case; interfaces named {Entity}UseCase / {Entity}Repo
- Test file:
{name}_test.gowith mock implementations
ANTI-PATTERNS
- Do not skip validation in use cases; always validate inputs via validator
- Do not couple to concrete repositories; depend on interfaces only
- Do not instantiate GeocodingService inside use cases; rely on DI
- Do not mix business logic into delivery layer
- Do not bypass existing patterns for separation of concerns (use cases separate from controllers)