new java and springboot base best practices (#22)
* new java and springboot base best practices * Update java-and-springboot.md * Update java-and-springboot.md * split java and springboot instructions * header wrap with signle quote * remove duplicate instruction * address code reviews * apply update-readme script * java and kotlin prompts for springboot * apply update-readme script * Apply suggestion from @aaronpowell --------- Co-authored-by: Aaron Powell <me@aaron-powell.com>
This commit is contained in:
parent
fd548e0284
commit
1ba5cc78ff
@ -35,6 +35,7 @@ Team and project-specific instructions to enhance GitHub Copilot's behavior for
|
||||
| [Genaiscript](instructions/genaiscript.instructions.md) | AI-powered script generation guidelines | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fgenaiscript.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fgenaiscript.instructions.md) |
|
||||
| [Generate Modern Terraform Code For Azure](instructions/generate-modern-terraform-code-for-azure.instructions.md) | Guidelines for generating modern Terraform code for Azure | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fgenerate-modern-terraform-code-for-azure.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fgenerate-modern-terraform-code-for-azure.instructions.md) |
|
||||
| [Go Development Instructions](instructions/go.instructions.md) | Instructions for writing Go code following idiomatic Go practices and community standards | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fgo.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fgo.instructions.md) |
|
||||
| [Java Development](instructions/java.instructions.md) | Guidelines for building Java base applications | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fjava.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fjava.instructions.md) |
|
||||
| [Guidance for Localization](instructions/localization.instructions.md) | Guidelines for localizing markdown documents | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Flocalization.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Flocalization.instructions.md) |
|
||||
| [Markdown](instructions/markdown.instructions.md) | Documentation and content creation standards | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fmarkdown.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fmarkdown.instructions.md) |
|
||||
| [Memory Bank](instructions/memory-bank.instructions.md) | Bank specific coding standards and best practices | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fmemory-bank.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fmemory-bank.instructions.md) |
|
||||
@ -44,6 +45,7 @@ Team and project-specific instructions to enhance GitHub Copilot's behavior for
|
||||
| [Python Coding Conventions](instructions/python.instructions.md) | Python coding conventions and guidelines | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fpython.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fpython.instructions.md) |
|
||||
| [Quarkus](instructions/quarkus.instructions.md) | Quarkus development standards and instructions | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fquarkus.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fquarkus.instructions.md) |
|
||||
| [Secure Coding and OWASP Guidelines](instructions/security-and-owasp.instructions.md) | Comprehensive secure coding instructions for all languages and frameworks, based on OWASP Top 10 and industry best practices. | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fsecurity-and-owasp.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fsecurity-and-owasp.instructions.md) |
|
||||
| [Spring Boot Development](instructions/springboot.instructions.md) | Guidelines for building Spring Boot base applications | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fspringboot.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Fspringboot.instructions.md) |
|
||||
| [Taming Copilot](instructions/taming-copilot.instructions.md) | Prevent Copilot from wreaking havoc across your codebase, keeping it under control. | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftaming-copilot.instructions.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftaming-copilot.instructions.md) |
|
||||
| [TanStack Start with Shadcn/ui Development Guide](instructions/tanstack-start-shadcn-tailwind.md) | Guidelines for building TanStack Start applications | [](https://vscode.dev/redirect?url=vscode%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftanstack-start-shadcn-tailwind.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-instructions%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Finstructions%2Ftanstack-start-shadcn-tailwind.md) |
|
||||
|
||||
@ -77,7 +79,11 @@ Ready-to-use prompt templates for specific development scenarios and tasks, defi
|
||||
| [.NET/C# Design Pattern Review](prompts/dotnet-design-pattern-review.prompt.md) | Review the C#/.NET code for design pattern implementation and suggest improvements. | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fdotnet-design-pattern-review.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fdotnet-design-pattern-review.prompt.md) |
|
||||
| [Entity Framework Core Best Practices](prompts/ef-core.prompt.md) | Get best practices for Entity Framework Core | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fef-core.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fef-core.prompt.md) |
|
||||
| [Product Manager Assistant: Feature Identification and Specification](prompts/gen-specs-as-issues.prompt.md) | This workflow guides you through a systematic approach to identify missing features, prioritize them, and create detailed specifications for implementation. | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fgen-specs-as-issues.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fgen-specs-as-issues.prompt.md) |
|
||||
| [Java Documentation (Javadoc) Best Practices](prompts/java-docs.prompt.md) | Ensure that Java types are documented with Javadoc comments and follow best practices for documentation. | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-docs.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-docs.prompt.md) |
|
||||
| [JUnit 5+ Best Practices](prompts/java-junit.prompt.md) | Get best practices for JUnit 5 unit testing, including data-driven tests | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-junit.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-junit.prompt.md) |
|
||||
| [Spring Boot Best Practices](prompts/java-springboot.prompt.md) | Get best practices for developing applications with Spring Boot. | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-springboot.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjava-springboot.prompt.md) |
|
||||
| [Javascript Typescript Jest](prompts/javascript-typescript-jest.prompt.md) | Best practices for writing JavaScript/TypeScript tests using Jest, including mocking strategies, test structure, and common patterns. | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjavascript-typescript-jest.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fjavascript-typescript-jest.prompt.md) |
|
||||
| [Spring Boot with Kotlin Best Practices](prompts/kotlin-springboot.prompt.md) | Get best practices for developing applications with Spring Boot and Kotlin. | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fkotlin-springboot.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fkotlin-springboot.prompt.md) |
|
||||
| [Multi Stage Dockerfile](prompts/multi-stage-dockerfile.prompt.md) | Create optimized multi-stage Dockerfiles for any language or framework | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fmulti-stage-dockerfile.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fmulti-stage-dockerfile.prompt.md) |
|
||||
| [My Issues](prompts/my-issues.prompt.md) | List my issues in the current repository | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fmy-issues.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fmy-issues.prompt.md) |
|
||||
| [My Pull Requests](prompts/my-pull-requests.prompt.md) | List my pull requests in the current repository | [](https://vscode.dev/redirect?url=vscode%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fmy-pull-requests.prompt.md) [](https://insiders.vscode.dev/redirect?url=vscode-insiders%3Achat-prompt%2Finstall%3Furl%3Dhttps%3A%2F%2Fraw.githubusercontent.com%2Fgithub%2Fawesome-copilot%2Fmain%2Fprompts%2Fmy-pull-requests.prompt.md) |
|
||||
|
||||
64
instructions/java.instructions.md
Normal file
64
instructions/java.instructions.md
Normal file
@ -0,0 +1,64 @@
|
||||
---
|
||||
description: 'Guidelines for building Java base applications'
|
||||
applyTo: '**/*.java'
|
||||
---
|
||||
|
||||
# Java Development
|
||||
|
||||
## General Instructions
|
||||
|
||||
- First, prompt the user if they want to integrate static analysis tools (SonarQube, PMD, Checkstyle)
|
||||
into their project setup. If yes, provide guidance on tool selection and configuration.
|
||||
- If the user declines static analysis tools or wants to proceed without them, continue with implementing the Best practices, bug patterns and code smell prevention guidelines outlined below.
|
||||
- Address code smells proactively during development rather than accumulating technical debt.
|
||||
- Focus on readability, maintainability, and performance when refactoring identified issues.
|
||||
- Use IDE / Code editor reported warnings and suggestions to catch common patterns early in development.
|
||||
|
||||
## Best practices
|
||||
|
||||
- **Records**: For classes primarily intended to store data (e.g., DTOs, immutable data structures), **Java Records should be used instead of traditional classes**.
|
||||
- **Pattern Matching**: Utilize pattern matching for `instanceof` and `switch` expression to simplify conditional logic and type casting.
|
||||
- **Type Inference**: Use `var` for local variable declarations to improve readability, but only when the type is explicitly clear from the right-hand side of the expression.
|
||||
- **Immutability**: Favor immutable objects. Make classes and fields `final` where possible. Use collections from `List.of()`/`Map.of()` for fixed data. Use `Stream.toList()` to create immutable lists.
|
||||
- **Streams and Lambdas**: Use the Streams API and lambda expressions for collection processing. Employ method references (e.g., `stream.map(Foo::toBar)`).
|
||||
- **Null Handling**: Avoid returning or accepting `null`. Use `Optional<T>` for possibly-absent values and `Objects` utility methods like `equals()` and `requireNonNull()`.
|
||||
|
||||
### Naming Conventions
|
||||
|
||||
- Follow Google's Java style guide:
|
||||
- `UpperCamelCase` for class and interface names.
|
||||
- `lowerCamelCase` for method and variable names.
|
||||
- `UPPER_SNAKE_CASE` for constants.
|
||||
- `lowercase` for package names.
|
||||
- Use nouns for classes (`UserService`) and verbs for methods (`getUserById`).
|
||||
- Avoid abbreviations and Hungarian notation.
|
||||
|
||||
### Bug Patterns
|
||||
|
||||
| Rule ID | Description | Example / Notes |
|
||||
| ------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
|
||||
| `S2095` | Resources should be closed | Use try-with-resources when working with streams, files, sockets, etc. |
|
||||
| `S1698` | Objects should be compared with `.equals()` instead of `==` | Especially important for Strings and boxed primitives. |
|
||||
| `S1905` | Redundant casts should be removed | Clean up unnecessary or unsafe casts. |
|
||||
| `S3518` | Conditions should not always evaluate to true or false | Watch for infinite loops or if-conditions that never change. |
|
||||
| `S108` | Unreachable code should be removed | Code after `return`, `throw`, etc., must be cleaned up. |
|
||||
|
||||
## Code Smells
|
||||
|
||||
| Rule ID | Description | Example / Notes |
|
||||
| ------- | ------------------------------------------------------ | ----------------------------------------------------------------------------- |
|
||||
| `S107` | Methods should not have too many parameters | Refactor into helper classes or use builder pattern. |
|
||||
| `S121` | Duplicated blocks of code should be removed | Consolidate logic into shared methods. |
|
||||
| `S138` | Methods should not be too long | Break complex logic into smaller, testable units. |
|
||||
| `S3776` | Cognitive complexity should be reduced | Simplify nested logic, extract methods, avoid deep `if` trees. |
|
||||
| `S1192` | String literals should not be duplicated | Replace with constants or enums. |
|
||||
| `S1854` | Unused assignments should be removed | Avoid dead variables—remove or refactor. |
|
||||
| `S109` | Magic numbers should be replaced with constants | Improves readability and maintainability. |
|
||||
| `S1188` | Catch blocks should not be empty | Always log or handle exceptions meaningfully. |
|
||||
|
||||
## Build and Verification
|
||||
|
||||
- After adding or modifying code, verify the project continues to build successfully.
|
||||
- If the project uses Maven, run `mvn clean install`.
|
||||
- If the project uses Gradle, run `./gradlew build` (or `gradlew.bat build` on Windows).
|
||||
- Ensure all tests pass as part of the build.
|
||||
58
instructions/springboot.instructions.md
Normal file
58
instructions/springboot.instructions.md
Normal file
@ -0,0 +1,58 @@
|
||||
---
|
||||
description: 'Guidelines for building Spring Boot base applications'
|
||||
applyTo: '**/*.java, **/*.kt'
|
||||
---
|
||||
|
||||
# Spring Boot Development
|
||||
|
||||
## General Instructions
|
||||
|
||||
- Make only high confidence suggestions when reviewing code changes.
|
||||
- Write code with good maintainability practices, including comments on why certain design decisions were made.
|
||||
- Handle edge cases and write clear exception handling.
|
||||
- For libraries or external dependencies, mention their usage and purpose in comments.
|
||||
|
||||
## Spring Boot Instructions
|
||||
|
||||
### Dependency Injection
|
||||
|
||||
- Use constructor injection for all required dependencies.
|
||||
- Declare dependency fields as `private final`.
|
||||
|
||||
### Configuration
|
||||
|
||||
- Use YAML files (`application.yml`) for externalized configuration.
|
||||
- Environment Profiles: Use Spring profiles for different environments (dev, test, prod)
|
||||
- Configuration Properties: Use @ConfigurationProperties for type-safe configuration binding
|
||||
- Secrets Management: Externalize secrets using environment variables or secret management systems
|
||||
|
||||
### Code Organization
|
||||
|
||||
- Package Structure: Organize by feature/domain rather than by layer
|
||||
- Separation of Concerns: Keep controllers thin, services focused, and repositories simple
|
||||
- Utility Classes: Make utility classes final with private constructors
|
||||
|
||||
### Service Layer
|
||||
|
||||
- Place business logic in `@Service`-annotated classes.
|
||||
- Services should be stateless and testable.
|
||||
- Inject repositories via the constructor.
|
||||
- Service method signatures should use domain IDs or DTOs, not expose repository entities directly unless necessary.
|
||||
|
||||
### Logging
|
||||
|
||||
- Use SLF4J for all logging (`private static final Logger logger = LoggerFactory.getLogger(MyClass.class);`).
|
||||
- Do not use concrete implementations (Logback, Log4j2) or `System.out.println()` directly.
|
||||
- Use parameterized logging: `logger.info("User {} logged in", userId);`.
|
||||
|
||||
### Security & Input Handling
|
||||
|
||||
- Use parameterized queries | Always use Spring Data JPA or `NamedParameterJdbcTemplate` to prevent SQL injection.
|
||||
- Validate request bodies and parameters using JSR-380 (`@NotNull`, `@Size`, etc.) annotations and `BindingResult`
|
||||
|
||||
## Build and Verification
|
||||
|
||||
- After adding or modifying code, verify the project continues to build successfully.
|
||||
- If the project uses Maven, run `mvn clean install`.
|
||||
- If the project uses Gradle, run `./gradlew build` (or `gradlew.bat build` on Windows).
|
||||
- Ensure all tests pass as part of the build.
|
||||
24
prompts/java-docs.prompt.md
Normal file
24
prompts/java-docs.prompt.md
Normal file
@ -0,0 +1,24 @@
|
||||
---
|
||||
mode: 'agent'
|
||||
tools: ['changes', 'codebase', 'editFiles', 'problems']
|
||||
description: 'Ensure that Java types are documented with Javadoc comments and follow best practices for documentation.'
|
||||
---
|
||||
|
||||
# Java Documentation (Javadoc) Best Practices
|
||||
|
||||
- Public and protected members should be documented with Javadoc comments.
|
||||
- It is encouraged to document package-private and private members as well, especially if they are complex or not self-explanatory.
|
||||
- The first sentence of the Javadoc comment is the summary description. It should be a concise overview of what the method does and end with a period.
|
||||
- Use `@param` for method parameters. The description starts with a lowercase letter and does not end with a period.
|
||||
- Use `@return` for method return values.
|
||||
- Use `@throws` or `@exception` to document exceptions thrown by methods.
|
||||
- Use `@see` for references to other types or members.
|
||||
- Use `{@inheritDoc}` to inherit documentation from base classes or interfaces.
|
||||
- Unless there is major behavior change, in which case you should document the differences.
|
||||
- Use `@param <T>` for type parameters in generic types or methods.
|
||||
- Use `{@code}` for inline code snippets.
|
||||
- Use `<pre>{@code ... }</pre>` for code blocks.
|
||||
- Use `@since` to indicate when the feature was introduced (e.g., version number).
|
||||
- Use `@version` to specify the version of the member.
|
||||
- Use `@author` to specify the author of the code.
|
||||
- Use `@deprecated` to mark a member as deprecated and provide an alternative.
|
||||
64
prompts/java-junit.prompt.md
Normal file
64
prompts/java-junit.prompt.md
Normal file
@ -0,0 +1,64 @@
|
||||
---
|
||||
mode: 'agent'
|
||||
tools: ['changes', 'codebase', 'editFiles', 'problems', 'search']
|
||||
description: 'Get best practices for JUnit 5 unit testing, including data-driven tests'
|
||||
---
|
||||
|
||||
# JUnit 5+ Best Practices
|
||||
|
||||
Your goal is to help me write effective unit tests with JUnit 5, covering both standard and data-driven testing approaches.
|
||||
|
||||
## Project Setup
|
||||
|
||||
- Use a standard Maven or Gradle project structure.
|
||||
- Place test source code in `src/test/java`.
|
||||
- Include dependencies for `junit-jupiter-api`, `junit-jupiter-engine`, and `junit-jupiter-params` for parameterized tests.
|
||||
- Use build tool commands to run tests: `mvn test` or `gradle test`.
|
||||
|
||||
## Test Structure
|
||||
|
||||
- Test classes should have a `Test` suffix, e.g., `CalculatorTests` for a `Calculator` class.
|
||||
- Use `@Test` for test methods.
|
||||
- Follow the Arrange-Act-Assert (AAA) pattern.
|
||||
- Name tests using a descriptive convention, like `methodName_should_expectedBehavior_when_scenario`.
|
||||
- Use `@BeforeEach` and `@AfterEach` for per-test setup and teardown.
|
||||
- Use `@BeforeAll` and `@AfterAll` for per-class setup and teardown (must be static methods).
|
||||
- Use `@DisplayName` to provide a human-readable name for test classes and methods.
|
||||
|
||||
## Standard Tests
|
||||
|
||||
- Keep tests focused on a single behavior.
|
||||
- Avoid testing multiple conditions in one test method.
|
||||
- Make tests independent and idempotent (can run in any order).
|
||||
- Avoid test interdependencies.
|
||||
|
||||
## Data-Driven (Parameterized) Tests
|
||||
|
||||
- Use `@ParameterizedTest` to mark a method as a parameterized test.
|
||||
- Use `@ValueSource` for simple literal values (strings, ints, etc.).
|
||||
- Use `@MethodSource` to refer to a factory method that provides test arguments as a `Stream`, `Collection`, etc.
|
||||
- Use `@CsvSource` for inline comma-separated values.
|
||||
- Use `@CsvFileSource` to use a CSV file from the classpath.
|
||||
- Use `@EnumSource` to use enum constants.
|
||||
|
||||
## Assertions
|
||||
|
||||
- Use the static methods from `org.junit.jupiter.api.Assertions` (e.g., `assertEquals`, `assertTrue`, `assertNotNull`).
|
||||
- For more fluent and readable assertions, consider using a library like AssertJ (`assertThat(...).is...`).
|
||||
- Use `assertThrows` or `assertDoesNotThrow` to test for exceptions.
|
||||
- Group related assertions with `assertAll` to ensure all assertions are checked before the test fails.
|
||||
- Use descriptive messages in assertions to provide clarity on failure.
|
||||
|
||||
## Mocking and Isolation
|
||||
|
||||
- Use a mocking framework like Mockito to create mock objects for dependencies.
|
||||
- Use `@Mock` and `@InjectMocks` annotations from Mockito to simplify mock creation and injection.
|
||||
- Use interfaces to facilitate mocking.
|
||||
|
||||
## Test Organization
|
||||
|
||||
- Group tests by feature or component using packages.
|
||||
- Use `@Tag` to categorize tests (e.g., `@Tag("fast")`, `@Tag("integration")`).
|
||||
- Use `@TestMethodOrder(MethodOrderer.OrderAnnotation.class)` and `@Order` to control test execution order when strictly necessary.
|
||||
- Use `@Disabled` to temporarily skip a test method or class, providing a reason.
|
||||
- Use `@Nested` to group tests in a nested inner class for better organization and structure.
|
||||
66
prompts/java-springboot.prompt.md
Normal file
66
prompts/java-springboot.prompt.md
Normal file
@ -0,0 +1,66 @@
|
||||
---
|
||||
mode: 'agent'
|
||||
tools: ['changes', 'codebase', 'editFiles', 'problems', 'search']
|
||||
description: 'Get best practices for developing applications with Spring Boot.'
|
||||
---
|
||||
|
||||
# Spring Boot Best Practices
|
||||
|
||||
Your goal is to help me write high-quality Spring Boot applications by following established best practices.
|
||||
|
||||
## Project Setup & Structure
|
||||
|
||||
- **Build Tool:** Use Maven (`pom.xml`) or Gradle (`build.gradle`) for dependency management.
|
||||
- **Starters:** Use Spring Boot starters (e.g., `spring-boot-starter-web`, `spring-boot-starter-data-jpa`) to simplify dependency management.
|
||||
- **Package Structure:** Organize code by feature/domain (e.g., `com.example.app.order`, `com.example.app.user`) rather than by layer (e.g., `com.example.app.controller`, `com.example.app.service`).
|
||||
|
||||
## Dependency Injection & Components
|
||||
|
||||
- **Constructor Injection:** Always use constructor-based injection for required dependencies. This makes components easier to test and dependencies explicit.
|
||||
- **Immutability:** Declare dependency fields as `private final`.
|
||||
- **Component Stereotypes:** Use `@Component`, `@Service`, `@Repository`, and `@Controller`/`@RestController` annotations appropriately to define beans.
|
||||
|
||||
## Configuration
|
||||
|
||||
- **Externalized Configuration:** Use `application.yml` (or `application.properties`) for configuration. YAML is often preferred for its readability and hierarchical structure.
|
||||
- **Type-Safe Properties:** Use `@ConfigurationProperties` to bind configuration to strongly-typed Java objects.
|
||||
- **Profiles:** Use Spring Profiles (`application-dev.yml`, `application-prod.yml`) to manage environment-specific configurations.
|
||||
- **Secrets Management:** Do not hardcode secrets. Use environment variables, or a dedicated secret management tool like HashiCorp Vault or AWS Secrets Manager.
|
||||
|
||||
## Web Layer (Controllers)
|
||||
|
||||
- **RESTful APIs:** Design clear and consistent RESTful endpoints.
|
||||
- **DTOs (Data Transfer Objects):** Use DTOs to expose and consume data in the API layer. Do not expose JPA entities directly to the client.
|
||||
- **Validation:** Use Java Bean Validation (JSR 380) with annotations (`@Valid`, `@NotNull`, `@Size`) on DTOs to validate request payloads.
|
||||
- **Error Handling:** Implement a global exception handler using `@ControllerAdvice` and `@ExceptionHandler` to provide consistent error responses.
|
||||
|
||||
## Service Layer
|
||||
|
||||
- **Business Logic:** Encapsulate all business logic within `@Service` classes.
|
||||
- **Statelessness:** Services should be stateless.
|
||||
- **Transaction Management:** Use `@Transactional` on service methods to manage database transactions declaratively. Apply it at the most granular level necessary.
|
||||
|
||||
## Data Layer (Repositories)
|
||||
|
||||
- **Spring Data JPA:** Use Spring Data JPA repositories by extending `JpaRepository` or `CrudRepository` for standard database operations.
|
||||
- **Custom Queries:** For complex queries, use `@Query` or the JPA Criteria API.
|
||||
- **Projections:** Use DTO projections to fetch only the necessary data from the database.
|
||||
|
||||
## Logging
|
||||
|
||||
- **SLF4J:** Use the SLF4J API for logging.
|
||||
- **Logger Declaration:** `private static final Logger logger = LoggerFactory.getLogger(MyClass.class);`
|
||||
- **Parameterized Logging:** Use parameterized messages (`logger.info("Processing user {}...", userId);`) instead of string concatenation to improve performance.
|
||||
|
||||
## Testing
|
||||
|
||||
- **Unit Tests:** Write unit tests for services and components using JUnit 5 and a mocking framework like Mockito.
|
||||
- **Integration Tests:** Use `@SpringBootTest` for integration tests that load the Spring application context.
|
||||
- **Test Slices:** Use test slice annotations like `@WebMvcTest` (for controllers) or `@DataJpaTest` (for repositories) to test specific parts of the application in isolation.
|
||||
- **Testcontainers:** Consider using Testcontainers for reliable integration tests with real databases, message brokers, etc.
|
||||
|
||||
## Security
|
||||
|
||||
- **Spring Security:** Use Spring Security for authentication and authorization.
|
||||
- **Password Encoding:** Always encode passwords using a strong hashing algorithm like BCrypt.
|
||||
- **Input Sanitization:** Prevent SQL injection by using Spring Data JPA or parameterized queries. Prevent Cross-Site Scripting (XSS) by properly encoding output.
|
||||
71
prompts/kotlin-springboot.prompt.md
Normal file
71
prompts/kotlin-springboot.prompt.md
Normal file
@ -0,0 +1,71 @@
|
||||
---
|
||||
mode: 'agent'
|
||||
tools: ['changes', 'codebase', 'editFiles', 'problems', 'search']
|
||||
description: 'Get best practices for developing applications with Spring Boot and Kotlin.'
|
||||
---
|
||||
|
||||
# Spring Boot with Kotlin Best Practices
|
||||
|
||||
Your goal is to help me write high-quality, idiomatic Spring Boot applications using Kotlin.
|
||||
|
||||
## Project Setup & Structure
|
||||
|
||||
- **Build Tool:** Use Maven (`pom.xml`) or Gradle (`build.gradle`) with the Kotlin plugins (`kotlin-maven-plugin` or `org.jetbrains.kotlin.jvm`).
|
||||
- **Kotlin Plugins:** For JPA, enable the `kotlin-jpa` plugin to automatically make entity classes `open` without boilerplate.
|
||||
- **Starters:** Use Spring Boot starters (e.g., `spring-boot-starter-web`, `spring-boot-starter-data-jpa`) as usual.
|
||||
- **Package Structure:** Organize code by feature/domain (e.g., `com.example.app.order`, `com.example.app.user`) rather than by layer.
|
||||
|
||||
## Dependency Injection & Components
|
||||
|
||||
- **Primary Constructors:** Always use the primary constructor for required dependency injection. It's the most idiomatic and concise approach in Kotlin.
|
||||
- **Immutability:** Declare dependencies as `private val` in the primary constructor. Prefer `val` over `var` everywhere to promote immutability.
|
||||
- **Component Stereotypes:** Use `@Service`, `@Repository`, and `@RestController` annotations just as you would in Java.
|
||||
|
||||
## Configuration
|
||||
|
||||
- **Externalized Configuration:** Use `application.yml` for its readability and hierarchical structure.
|
||||
- **Type-Safe Properties:** Use `@ConfigurationProperties` with `data class` to create immutable, type-safe configuration objects.
|
||||
- **Profiles:** Use Spring Profiles (`application-dev.yml`, `application-prod.yml`) to manage environment-specific configurations.
|
||||
- **Secrets Management:** Never hardcode secrets. Use environment variables or a dedicated secret management tool like HashiCorp Vault or AWS Secrets Manager.
|
||||
|
||||
## Web Layer (Controllers)
|
||||
|
||||
- **RESTful APIs:** Design clear and consistent RESTful endpoints.
|
||||
- **Data Classes for DTOs:** Use Kotlin `data class` for all DTOs. This provides `equals()`, `hashCode()`, `toString()`, and `copy()` for free and promotes immutability.
|
||||
- **Validation:** Use Java Bean Validation (JSR 380) with annotations (`@Valid`, `@NotNull`, `@Size`) on your DTO data classes.
|
||||
- **Error Handling:** Implement a global exception handler using `@ControllerAdvice` and `@ExceptionHandler` for consistent error responses.
|
||||
|
||||
## Service Layer
|
||||
|
||||
- **Business Logic:** Encapsulate business logic within `@Service` classes.
|
||||
- **Statelessness:** Services should be stateless.
|
||||
- **Transaction Management:** Use `@Transactional` on service methods. In Kotlin, this can be applied to class or function level.
|
||||
|
||||
## Data Layer (Repositories)
|
||||
|
||||
- **JPA Entities:** Define entities as classes. Remember they must be `open`. It's highly recommended to use the `kotlin-jpa` compiler plugin to handle this automatically.
|
||||
- **Null Safety:** Leverage Kotlin's null-safety (`?`) to clearly define which entity fields are optional or required at the type level.
|
||||
- **Spring Data JPA:** Use Spring Data JPA repositories by extending `JpaRepository` or `CrudRepository`.
|
||||
- **Coroutines:** For reactive applications, leverage Spring Boot's support for Kotlin Coroutines in the data layer.
|
||||
|
||||
## Logging
|
||||
|
||||
- **Companion Object Logger:** The idiomatic way to declare a logger is in a companion object.
|
||||
```kotlin
|
||||
companion object {
|
||||
private val logger = LoggerFactory.getLogger(MyClass::class.java)
|
||||
}
|
||||
```
|
||||
- **Parameterized Logging:** Use parameterized messages (`logger.info("Processing user {}...", userId)`) for performance and clarity.
|
||||
|
||||
## Testing
|
||||
|
||||
- **JUnit 5:** JUnit 5 is the default and works seamlessly with Kotlin.
|
||||
- **Idiomatic Testing Libraries:** For more fluent and idiomatic tests, consider using **Kotest** for assertions and **MockK** for mocking. They are designed for Kotlin and offer a more expressive syntax.
|
||||
- **Test Slices:** Use test slice annotations like `@WebMvcTest` or `@DataJpaTest` to test specific parts of the application.
|
||||
- **Testcontainers:** Use Testcontainers for reliable integration tests with real databases, message brokers, etc.
|
||||
|
||||
## Coroutines & Asynchronous Programming
|
||||
|
||||
- **`suspend` functions:** For non-blocking asynchronous code, use `suspend` functions in your controllers and services. Spring Boot has excellent support for coroutines.
|
||||
- **Structured Concurrency:** Use `coroutineScope` or `supervisorScope` to manage the lifecycle of coroutines.
|
||||
Loading…
x
Reference in New Issue
Block a user