spring-boot-architecture
$
npx mdskill add HoangNguyen0403/agent-skills-standard/spring-boot-architecture- **Package by Feature**: Prefer `com.app.feature` (e.g., `user`, `order`) over technical layers (`controllers`) for scalability. - **Dependency Rule**: Outer layers (Web) depend on Inner (Service). Inner layers MUST NOT depend on Outer. - **DTO Pattern**: ALWAYS use DTOs for API inputs/outputs. NEVER return `@Entity` directly. - **Java Records**: Use `record` for DTOs to ensure immutability (Java 17+).
SKILL.md
.github/skills/spring-boot-architectureView on GitHub ↗
---
name: spring-boot-architecture
description: Structure Spring Boot 3+ projects with feature packaging and clean layering. Use when structuring Spring Boot 3 projects, defining layers, or applying architecture patterns.
metadata:
triggers:
files:
- 'pom.xml'
- 'build.gradle'
keywords:
- structure
- layering
- dto
- controller
- "@RestController"
- "@Service"
- "@Repository"
- "@Entity"
- "@Bean"
- "@Configuration"
---
# Spring Boot Architecture Standards
## **Priority: P0 (CRITICAL)**
## Organize by Feature
- **Package by Feature**: Prefer `com.app.feature` (e.g., `user`, `order`) over technical layers (`controllers`) for scalability.
- **Dependency Rule**: Outer layers (Web) depend on Inner (Service). Inner layers MUST NOT depend on Outer.
- **DTO Pattern**: ALWAYS use DTOs for API inputs/outputs. NEVER return `@Entity` directly.
- **Java Records**: Use `record` for DTOs to ensure immutability (Java 17+).
See [implementation examples](references/implementation.md) for Java Record DTOs, controller patterns, and global exception handling.
## Define Layer Responsibilities
1. **Controller (Web)**: Handle HTTP, Validation (`@Valid`), DTO mapping. Delegate logic to Service.
2. **Service (Business)**: Transaction boundaries, orchestration. Returns Domain/DTOs.
3. **Repository (Data)**: Database interactions only. Returns Entities/Projections.
## Design API Layer
- **Global Error Handling**: Use `@RestControllerAdvice` with `ProblemDetails` (RFC 7807).
- **Validation**: Use Jakarta Bean Validation (`@NotNull`, `@Size`) on DTOs.
- **Response**: Use `ResponseEntity` for explicit status or `ResponseStatusException`.
## Verification Checklist (Mandatory)
- [ ] **No Entities in API**: all API responses using DTOs/Records instead of JPA Entities?
- [ ] **Validation**: `@Valid` and Jakarta Bean Validation constraints present on all input DTOs?
- [ ] **Layer coupling**: Services depend on Controllers? (Prohibited)
- [ ] **Transactionality**: business transactions correctly bounded with `@Transactional` in Service layer?
- [ ] **Error Details**: `ProblemDetails` used for consistent error responses?
## Anti-Patterns
- **No Fat Controllers**: Move business logic to Services.
- **No Leaking Entities**: Use DTOs instead of JPA Entities in APIs.
- **No Circular Dependencies**: Use Events or refactor to decouple services.
- **No God Classes**: Split large services into single-responsibility components.
## References
- [Implementation Examples](references/implementation.md)