Layered architecture with dependency inversion principle
Responsibility: HTTP requests/responses, input data validation, status codes
Depends on: SubscriptionServiceInterface
Responsibility: Business rules, data validation, transaction execution
Depends on: SubscriptionRepositoryInterface
Responsibility: Database operations, working with GORM
Depends on: *gorm.DB (concrete implementation)
Responsibility: External dependencies, database, file system, network
โ What we get:
Each layer only knows about its immediate dependencies through interfaces