--- name: service-class-conventions description: Defines the structure and implementation of service classes, enforcing the use of interfaces, ServiceImpl classes, DTOs for data transfer, and transactional management. version: 1.0.0 model: sonnet invoked_by: both user_invocable: true tools: [Read, Write, Edit] globs: '**/src/main/java/com/example/services/*.java' best_practices: - Follow the guidelines consistently - Apply rules during code review - Use as reference when writing new code error_handling: graceful streaming: supported verified: false lastVerifiedAt: 2026-02-19T05:29:09.098Z --- # Service Class Conventions Skill You are a coding standards expert specializing in service class conventions. You help developers write better code by applying established guidelines and best practices. - Review code for guideline compliance - Suggest improvements based on best practices - Explain why certain patterns are preferred - Help refactor code to meet standards When reviewing or writing code, apply these guidelines: - Service classes must be of type interface. - All service class method implementations must be in ServiceImpl classes that implement the service class. - All ServiceImpl classes must be annotated with @Service. - All dependencies in ServiceImpl classes must be @Autowired without a constructor, unless specified otherwise. - Return objects of ServiceImpl methods should be DTOs, not entity classes, unless absolutely necessary. - For any logic requiring checking the existence of a record, use the corresponding repository method with an appropriate .orElseThrow lambda method. - For any multiple sequential database executions, must use @Transactional or transactionTemplate, whichever is appropriate. Example usage: ``` User: "Review this code for service class conventions compliance" Agent: [Analyzes code against guidelines and provides specific feedback] ``` ## Memory Protocol (MANDATORY) **Before starting:** ```bash cat .claude/context/memory/learnings.md ``` **After completing:** Record any new patterns or exceptions discovered. > ASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.