[JAVA] Ressort avec Kotorin ―― 7. Couche de service

Aperçu / Description

J'ai créé une application côté serveur avec Kotlin, mais ce n'est pas encore dans une configuration soignée. Créez une classe de contrôleur avec "Kotorin et Spring Mone - 2. RestController et Data Class", et la configuration est toujours telle qu'elle gère directement les données. Par conséquent, nous apporterons des changements petit à petit. Considérons d'abord la couche "** service **".

service-layer.png

Les applications Web sont grossièrement divisées en fonctions suivantes.

Jusqu'à présent, ces fonctions étaient gérées en une seule couche. Avec cette configuration, la logique à gérer augmente et le modèle de données se complique, Une classe devient énorme et l'efficacité du développement / maintenance se détériore.

Séparez chaque fonction et divisez-la en plusieurs couches.

Au fait, le cours que je faisais est RestController, À l'origine, il est de la responsabilité de traiter les demandes / réponses. Par conséquent, l'autre traitement est coupé et il est désigné comme ** service **.

Hypothèse / environnement

Version d'exécution

Spring Dependencies

Environnement de développement

Procédure / Explication

Classe de contrôleur avant le changement

À l'origine, je faisais des choses autres que le traitement des demandes / réponses telles que la génération de données dans la classe de contrôleur comme suit.

@RestController
@RequestMapping("/messages")
class SimpleController {

    @GetMapping
    fun getMessages() : List<Message> {
        return listOf(
                Message(
                        UUID.randomUUID().toString(),
                        "First Message",
                        "This is a 1st message on ${getDate()}."
                ),
                Message(UUID.randomUUID().toString(),
                        "Second Message",
                        "This is a 2nd message on ${getDate()}."
                )
        )
    }

    private fun getDate() : String {
        val simpleDateFormat = SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
        return simpleDateFormat.format(Date())
    }
}

Classe de service

Déplacez le contenu initialement implémenté dans la classe de contrôleur vers la classe de service comme suit.

@Service("Message Service")
class MessageService {

    fun getMessages() : List<Message> {
        return listOf(
                Message(
                        UUID.randomUUID().toString(),
                        "First Message",
                        "This is a 1st message on ${getDate()}."
                ),
                Message(UUID.randomUUID().toString(),
                        "Second Message",
                        "This is a 2nd message on ${getDate()}."
                )
        )
    }

    private fun getDate() : String {
        val simpleDateFormat = SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
        return simpleDateFormat.format(Date())
    }
}

Annotez la classe de service avec le @ Service. Cela le rend disponible par injection de dépendance dans la classe de contrôleur.

@Autowired
private lateinit var service: MessageService

Le mot-clé lateinit est utilisé lors de la déclaration d'une instance sans l'initialiser.

Classe de contrôleur modifiée

Les classes de contrôleur qui utilisent des classes de service ne devraient être responsables que du traitement des demandes / réponses. Apportez les modifications suivantes pour appeler le processus implémenté dans la classe de service.

@RestController
@RequestMapping("/messages")
class MessageController() {

    @Autowired
    private lateinit var service: MessageService

    @GetMapping
    fun getMessages() = service.getMessages()
}

Résumé / Rétrospective

Le développement d'applications avec des couches séparées pour chaque responsabilité est désormais une norme. Pourtant, dans cet état, le traitement des données est effectué directement à partir de la couche de service, donc Ensuite, nous séparerons cette partie.

Cette source

Recommended Posts

Ressort avec Kotorin ―― 7. Couche de service
Spring with Kotorin --- 8. Couche de référentiel
Ressort avec actionneur Kotorin --5
Printemps avec Kotorin ―― 1. INITIALISATION PRINTEMPS
Spring with Kotorin --8 Repository layer --Supplément: H2 Database
Spring avec Kotorin --6 Traitement asynchrone
Spring avec Kotorin - 4 Conception d'API REST
Spring with Kotorin ―― 9. Migration de base de données ―― Flyway
Spring avec Kotorin --2 RestController et Data Class
Validation personnalisée avec Spring
Avec Kotorin ―― 7. Fonction de cadrage
Télécharger avec Spring Boot
Ressort avec Kotorin ―― 3. Omettre les crochets d'onde de la fonction
Un mémorandum lors de la création d'un service REST avec Spring Boot
Générer un code à barres avec Spring Boot
Hello World avec Spring Boot
Configuration Java avec Spring MVC
Implémenter GraphQL avec Spring Boot
Démarrez avec Spring Boot
Implémenter l'API REST avec Spring Boot et JPA (Application Layer)
Implémenter l'API REST avec Spring Boot et JPA (couche d'infrastructure)
Bonjour tout le monde avec Spring Boot!
Téléchargement de fichiers avec Spring Boot
Spring Boot commençant par copie
Fonction de connexion avec Spring Security
Utilisation de Mapper avec Java (Spring)
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Lier l'API avec Spring + Vue.js
Implémenter l'API REST avec Spring Boot et JPA (Domain Layer Edition)
Créer un micro service avec Spring Boot
Envoyer du courrier avec Spring Boot
Utiliser l'authentification de base avec Spring Boot
Mise en œuvre de la fonction d'authentification avec Spring Security ②
gRPC sur Spring Boot avec grpc-spring-boot-starter
Implémentez la fonction d'authentification avec Spring Security ③
Créez une application avec Spring Boot 2
Déploiement à chaud avec le développement Spring Boot
Liaison de base de données avec doma2 (Spring boot)
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Mise en œuvre de la fonction d'authentification avec Spring Security ①
Obtenez des résultats de validation avec Spring Boot
Implémenter le téléchargement de fichiers avec Spring MVC
Authentification Oauth2 avec Spring Cloud Gateway
(Intellij) Hello World avec Spring Boot
Créez une application avec Spring Boot
Google Cloud Platform avec Spring Boot 2.0.0
J'ai essayé GraphQL avec Spring Boot
[Java] Intégration LINE avec Spring Boot
[Spring] Plusieurs beans auto-câblés. (Avec bonus)
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
Certification / autorisation avec Spring Security & Thymeleaf
Contrôleur de cadre de test Spring avec Junit