- Organize into modules: `domain` (entities, repository interfaces), `application` (use cases), `infrastructure` (Spring, JPA, APIs).
- Domain module has no Spring annotations, no JPA, no framework dependencies.
- Use cases return domain objects — mapping to DTOs happens in the controller/adapter layer, not in the business logic.
- Define repository interfaces in domain. Implement with Spring Data JPA in infrastructure.
- Use cases are `@Service` classes in the application layer. They orchestrate domain logic.
- Use DTOs for API request/response. Map to domain entities at the infrastructure boundary.
- Use constructor injection everywhere. Wire dependencies via Spring's DI container.