[JAVA] Frühling mit Kotorin --- 8. Aufbewahrungsschicht

Übersicht / Beschreibung

Spring with Kotorin --7 Service wurde geändert, um zu vermeiden, dass sich die Verantwortlichkeiten auf ein einziges Modul konzentrieren. Der Grund ist, zu vermeiden, ein ** Fat Controller ** mit geringer Wartbarkeit, Skalierbarkeit und Lesbarkeit zu werden. Zu diesem Zweck haben wir die Anwendungslogik von der Controller-Schicht getrennt und eine ** Service ** -Schicht bereitgestellt.

service

Dies ermöglicht es, die zu fokussierenden Funktionsbereiche in der Controller-Schicht und der Service-Schicht zu trennen.

Schicht Rolle
Controller-Schicht Anfragen annehmen
Serviceschicht Verarbeitung von Geschäftslogik außer Anforderungsannahme

Betrachten Sie nun die neu erstellten Verantwortlichkeiten der Service-Schicht.

Die Rolle der Serviceschicht besteht darin, eine andere "Geschäftslogik als das Akzeptieren von Anforderungen" zu handhaben. Mit anderen Worten, so wie es ist, wird die Persistenzverarbeitung des Ergebnisses der Geschäftslogik auch in dieser Sevice-Schicht durchgeführt.

Übrigens, wenn die Serviceschicht den Datenbereich kennt, der beibehalten werden soll, Es ist notwendig, entsprechend der Art des Zielbereichs zu entwerfen.

Außerdem wird die Abhängigkeit von der Art des Außenbereichs stärker und der Einflussbereich wird größer, wenn Änderungen vorgenommen werden. Wenn Sie beispielsweise eine Datenbank als Beispiel für den Wechsel von Oracle DB zu MySQL verwenden, ist ein Design erforderlich, das die Unterschiede in den Dialekten berücksichtigt.

service-db.png

In Anbetracht der Rolle der Serviceschicht ** Geschäftslogikverarbeitung ** ist es einfacher zu entwerfen und zu warten, wenn das Ergebnis transparent verarbeitet werden kann, ohne das Ziel der Ergebnispersistenz zu kennen.

Eine ** Repository ** -Schicht wird als Mechanismus bereitgestellt, um den Persistenzprozess von dieser Service-Schicht zu trennen.

repository.png

Annahme / Umwelt

Laufzeitversion

Spring Dependencies

Entwicklungsumgebung

Beim Einrichten der Repository-Schicht wird diesmal die Datenbank als Persistenzbereich ausgewählt. Der Kürze halber verwenden wir die H2-Datenbank und führen sie im eingebetteten Modus aus.

Vorgehensweise / Erklärung

Dependency Fügen Sie build.gradle die folgende Abhängigkeit für den Datenbankzugriff hinzu.

Fügen Sie außerdem die folgende Abhängigkeit hinzu, um die H2-Datenbank zu verwenden.

Datenbankdefinition

Fügen Sie application.yml die folgenden Definitionen für die H2-Datenbank hinzu.

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

Repository-Schicht

Die folgende Schnittstellendefinition wurde erstellt, um eine Ebene für die Persistenzverarbeitung bereitzustellen.

interface MessageRepository : CrudRepository<Message, String>

Ermöglicht die Arbeit mit Entitäten, die Daten über diese Schnittstelle beibehalten.

Serviceschicht

Von der Service-Schicht aus wird die Entität über die Instanz der injizierten Repository-Schicht betrieben.

@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
        ))
)

Zusammenfassung / Rückblick

Sie können sehen, dass der Code viel einfacher geworden ist als vor der Trennung, indem Sie die Rollen als Controller / Service / Repository separat entwerfen. Auf diese Weise kann verhindert werden, dass das Modul aufgebläht, Spaghetti-codiert und die Skalierbarkeit verringert wird.

Diese Quelle

Recommended Posts

Frühling mit Kotorin --- 8. Aufbewahrungsschicht
Feder mit Kotorin ―― 7. Serviceschicht
Frühling mit Kotorin - 8 Repository-Schicht - Ergänzung: H2-Datenbank
Feder mit Kotorin --5 Aktuator
Frühling mit Kotorin ―― 1. SPRING INITIALIZR
Feder mit Kotorin --6 Asynchrone Verarbeitung
Feder mit Kotorin --4 REST API Design
Frühling mit Kotorin ―― 9. Datenbankmigration ―― Flyway
Feder mit Kotorin --2 RestController und Datenklasse
Erstellen eines gemeinsamen Repositorys mit Spring Data JPA
Selbstgemachte Validierung mit Spring
Mit Kotorin ―― 7. Scoping-Funktion
Mit Spring Boot herunterladen
Feder mit Kotorin ―― 3. Auslassen von Wellenklammern aus der Funktion
Generieren Sie mit Spring Boot einen Barcode
Implementieren Sie GraphQL mit Spring Boot
Beginnen Sie mit Spring Boot
Implementieren Sie die REST-API mit Spring Boot und JPA (Application Layer).
Implementieren Sie die REST-API mit Spring Boot und JPA (Infrastructure Layer).
Hallo Welt mit Spring Boot!
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Anmeldefunktion mit Spring Security
Verwenden von Mapper mit Java (Spring)
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
API mit Spring + Vue.js verknüpfen
Implementieren Sie die REST-API mit Spring Boot und JPA (Domain Layer Edition).
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Verwenden Sie die Standardauthentifizierung mit Spring Boot
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Implementierte Authentifizierungsfunktion mit Spring Security ③
Erstellen Sie eine App mit Spring Boot 2
Hot Deploy mit Spring Boot-Entwicklung
Datenbankverknüpfung mit doma2 (Spring Boot)
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Implementierte Authentifizierungsfunktion mit Spring Security ①
Erhalten Sie Validierungsergebnisse mit Spring Boot
Implementieren Sie den Dateidownload mit Spring MVC
Oauth2-Authentifizierung mit Spring Cloud Gateway
(Intellij) Hallo Welt mit Spring Boot
Erstellen Sie eine App mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
[Frühling] Mehrere Bohnen automatisch verdrahtet. (Mit Bonus)
Greifen Sie über das Repository mit Spring Data auf die Datenbank zu.
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Testen Sie den Spring Framework Controller mit Junit