[JAVA] Spring with Kotorin --- 8. Couche de référentiel

Aperçu / Description

Spring with Kotorin --7 Service a été modifié pour éviter de concentrer les responsabilités sur un seul module. La raison est d'éviter de devenir un ** Fat Controller ** avec une faible maintenabilité, évolutivité et lisibilité. Pour cela, nous avons séparé la logique de l'application de la couche Controller et fourni une couche ** Service **.

service

Cela permet de séparer les zones fonctionnelles sur lesquelles se concentrer dans la couche Contrôleur et la couche Service.

couche rôle
Couche contrôleur Accepter les demandes
Couche de service Traitement de la logique métier autre que la demande d'acceptation

Considérez maintenant les responsabilités nouvellement créées de la couche Service.

Le rôle de la couche Service est de gérer «la logique métier autre que l'acceptation des demandes». En d'autres termes, tel quel, le traitement de persistance du résultat de la logique métier sera également effectué dans cette couche de service.

À propos, lors de l'examen de la persistance des données, si la couche de service est consciente de la zone cible à persister, Il est nécessaire de concevoir en fonction du type de zone cible.

De plus, la dépendance vis-à-vis du type de zone externe devient plus forte et la plage d'influence s'élargit lors des modifications. Par exemple, en prenant une base de données comme exemple, le passage d'Oracle DB à MySQL nécessite une conception qui prend en compte les différences de dialectes.

service-db.png

Compte tenu du rôle de la couche Service, ** Traitement de la logique métier **, il est plus facile de concevoir et de maintenir la maintenance si le résultat peut être traité de manière transparente sans connaître la destination de persistance.

Une couche ** Repository ** est fournie comme mécanisme pour séparer le processus de persistance de cette couche Service.

repository.png

Hypothèse / environnement

Version d'exécution

Spring Dependencies

Environnement de développement

Lors de la configuration de la couche Repository, cette fois, nous ciblerons la base de données en tant que zone de persistance. De plus, par souci de concision, nous utiliserons la base de données H2 et l'exécuterons en mode intégré.

Procédure / Explication

Dependency Ajoutez la dépendance suivante à build.gradle pour accéder à la base de données.

Ajoutez également la dépendance suivante pour utiliser la base de données H2.

Définition de la base de données

Ajoutez les définitions suivantes pour la base de données H2 à application.yml.

spring:
  datasource:
    tomcat:
      test-on-borrow: true
      validation-interval: 30000
      validation-query: SELECT 1
      remove-abandoned: true
      remove-abandoned-timeout: 10000
      log-abandoned: true
      log-validation-errors: true
      max-age: 1800000
      max-active: 50
      max-idle: 10
    driver-class-name: org.h2.Driver
    url: jdbc:h2:mem:app;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE
    username: guest
    password: guest
  h2:
    console:
      enabled: true
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true

Couche de référentiel

La définition d'interface suivante a été faite pour fournir une couche pour le traitement de persistance.

interface MessageRepository : CrudRepository<Message, String>

Vous permet de travailler avec des entités qui conservent des données via cette interface.

Couche de service

À partir de la couche Service, l'entité est exploitée via l'instance de couche Repository injectée.

@Autowired
lateinit var repository: MessageRepository

fun getMessages() : Iterable<MessageDTO> = repository.findAll().map { it -> MessageDTO(it) }

fun insertMessage(messageDto: MessageDTO) = MessageDTO(
        repository.save(Message(
                                title = messageDto.title,
                                message = messageDto.message
        ))
)

Résumé / Rétrospective

Vous pouvez voir que le code est devenu beaucoup plus simple qu'avant la séparation en concevant les rôles en tant que contrôleur / service / référentiel séparément. En concevant de cette manière, il est possible d'empêcher le module de se gonfler, d'être codé en spaghetti et de réduire sa scalabilité.

Cette source

Recommended Posts

Spring with Kotorin --- 8. Couche de référentiel
Ressort avec Kotorin ―― 7. Couche de service
Spring with Kotorin --8 Repository layer --Supplément: H2 Database
Ressort avec actionneur Kotorin --5
Printemps avec Kotorin ―― 1. INITIALISATION PRINTEMPS
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
Création d'un référentiel commun avec Spring Data JPA
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
Générer un code à barres avec Spring Boot
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!
Exécutez LIFF avec Spring Boot
Connexion SNS 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
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)
Accédez à la base de données en utilisant le référentiel avec Spring Data.
À 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