kotlin-springboot

Par github · awesome-copilot

Obtenez les meilleures pratiques pour développer des applications avec Spring Boot et Kotlin.

npx skills add https://github.com/github/awesome-copilot --skill kotlin-springboot

Spring Boot avec Kotlin : Bonnes Pratiques

Votre objectif est de m'aider à écrire des applications Spring Boot de haute qualité et idiomatiques en utilisant Kotlin.

Configuration du Projet et Structure

  • Outil de Build : Utilisez Maven (pom.xml) ou Gradle (build.gradle) avec les plugins Kotlin (kotlin-maven-plugin ou org.jetbrains.kotlin.jvm).
  • Plugins Kotlin : Pour JPA, activez le plugin kotlin-jpa pour rendre automatiquement les classes d'entité open sans boilerplate.
  • Starters : Utilisez les starters Spring Boot (ex. spring-boot-starter-web, spring-boot-starter-data-jpa) comme d'habitude.
  • Structure des Packages : Organisez le code par fonctionnalité/domaine (ex. com.example.app.order, com.example.app.user) plutôt que par couche.

Injection de Dépendances et Composants

  • Constructeurs Primaires : Utilisez toujours le constructeur primaire pour l'injection de dépendances requises. C'est l'approche la plus idiomatique et concise en Kotlin.
  • Immutabilité : Déclarez les dépendances comme private val dans le constructeur primaire. Préférez val à var partout pour promouvoir l'immutabilité.
  • Stéréotypes de Composants : Utilisez les annotations @Service, @Repository et @RestController comme vous le feriez en Java.

Configuration

  • Configuration Externalisée : Utilisez application.yml pour sa lisibilité et sa structure hiérarchique.
  • Propriétés Type-Safe : Utilisez @ConfigurationProperties avec data class pour créer des objets de configuration immutables et type-safe.
  • Profils : Utilisez les Profils Spring (application-dev.yml, application-prod.yml) pour gérer les configurations spécifiques à l'environnement.
  • Gestion des Secrets : Ne codez jamais en dur les secrets. Utilisez des variables d'environnement ou un outil de gestion des secrets dédié comme HashiCorp Vault ou AWS Secrets Manager.

Couche Web (Contrôleurs)

  • APIs RESTful : Concevez des endpoints RESTful clairs et cohérents.
  • Data Classes pour les DTOs : Utilisez Kotlin data class pour tous les DTOs. Cela fournit gratuitement equals(), hashCode(), toString() et copy(), et promeut l'immutabilité.
  • Validation : Utilisez Java Bean Validation (JSR 380) avec des annotations (@Valid, @NotNull, @Size) sur vos data classes DTO.
  • Gestion des Erreurs : Implémentez un gestionnaire d'exceptions global avec @ControllerAdvice et @ExceptionHandler pour des réponses d'erreur cohérentes.

Couche Service

  • Logique Métier : Encapsulez la logique métier dans les classes @Service.
  • Sans État : Les services doivent être sans état.
  • Gestion des Transactions : Utilisez @Transactional sur les méthodes de service. En Kotlin, cela peut s'appliquer au niveau de la classe ou de la fonction.

Couche Données (Repositories)

  • Entités JPA : Définissez les entités comme des classes. N'oubliez pas qu'elles doivent être open. Il est fortement recommandé d'utiliser le plugin compilateur kotlin-jpa pour gérer cela automatiquement.
  • Sécurité Null : Tirez parti de la sécurité null de Kotlin (?) pour définir clairement au niveau du type quels champs d'entité sont optionnels ou obligatoires.
  • Spring Data JPA : Utilisez les repositories Spring Data JPA en étendant JpaRepository ou CrudRepository.
  • Coroutines : Pour les applications réactives, exploitez le support de Spring Boot pour les Kotlin Coroutines dans la couche données.

Logging

  • Logger en Companion Object : La manière idiomatique de déclarer un logger est dans un companion object.
    companion object {
        private val logger = LoggerFactory.getLogger(MyClass::class.java)
    }
  • Logging Paramétré : Utilisez les messages paramétrés (logger.info("Processing user {}...", userId)) pour la performance et la clarté.

Tests

  • JUnit 5 : JUnit 5 est par défaut et fonctionne parfaitement avec Kotlin.
  • Bibliothèques de Test Idiomatiques : Pour des tests plus fluides et idiomatiques, considérez l'utilisation de Kotest pour les assertions et MockK pour les mocks. Ils sont conçus pour Kotlin et offrent une syntaxe plus expressive.
  • Test Slices : Utilisez les annotations de tranche de test comme @WebMvcTest ou @DataJpaTest pour tester des parties spécifiques de l'application.
  • Testcontainers : Utilisez Testcontainers pour des tests d'intégration fiables avec de vraies bases de données, courtiers de messages, etc.

Coroutines et Programmation Asynchrone

  • Fonctions suspend : Pour le code asynchrone non-bloquant, utilisez les fonctions suspend dans vos contrôleurs et services. Spring Boot a un excellent support des coroutines.
  • Concurrence Structurée : Utilisez coroutineScope ou supervisorScope pour gérer le cycle de vie des coroutines.

Skills similaires