25 lines
1.2 KiB
Markdown
25 lines
1.2 KiB
Markdown
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.go` with 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)
|