Java Style Guide Overview
General Principles
The Essencium Backend follows standard Java conventions and Spring Boot best practices. This guide outlines the coding standards and conventions used throughout the project.
Code Organization
Package Structure
- Use meaningful package names that reflect the functionality
- Follow domain-driven design principles
- Separate concerns into distinct packages:
controller- REST controllersservice- Business logicrepository- Data accessmodel- Domain entitiesdto- Data transfer objectsconfiguration- Spring configurationsecurity- Security-related classesutil- Utility classes
Class Naming
- Use PascalCase for class names
- Be descriptive and avoid abbreviations
- Suffix classes appropriately:
*Controllerfor REST controllers*Servicefor service classes*Repositoryfor repositories*Dtofor DTOs*Representationfor API responses*Configurationfor configuration classes
Lombok Usage
We use Lombok extensively to reduce boilerplate:
@Datafor simple POJOs@Builderfor immutable objects@Slf4jfor logging- Avoid overusing
@Dataon entities (use specific annotations instead)
Spring Boot Conventions
Dependency Injection
- Prefer constructor injection over field injection
- Use
@RequiredArgsConstructorwithfinalfields - Avoid
@Autowiredon fields
Annotations
- Place annotations on separate lines for readability
- Order: Spring annotations, then JPA, then Lombok
- Document complex configurations with comments
Method Design
Single Responsibility
- Each method should do one thing well
- Keep methods short (< 20 lines preferred)
- Extract complex logic into private helper methods
Naming
- Use descriptive verb-based names
- Follow Java conventions (camelCase)
- Boolean methods should start with
is,has, orcan
Error Handling
- Use appropriate exception types
- Create custom exceptions for domain-specific errors
- Always log errors with appropriate levels
- Return meaningful error messages to clients
Testing
- Write unit tests for all business logic
- Use descriptive test method names
- Follow AAA pattern (Arrange, Act, Assert)
- Mock external dependencies
Documentation
- Use Javadoc for public APIs
- Document complex business logic
- Keep documentation up-to-date
- Use
@Operationannotations for REST endpoints