[JAVA] Feder mit Kotorin ―― 7. Serviceschicht

Übersicht / Beschreibung

Ich habe mit Kotlin eine serverseitige Anwendung erstellt, die jedoch noch nicht ordnungsgemäß konfiguriert ist. Erstellen Sie eine Controller-Klasse mit "Kotorin und Spring Mone - 2. RestController und Datenklasse", und die Konfiguration ist weiterhin so, dass Daten direkt verarbeitet werden. Daher werden wir nach und nach Änderungen vornehmen. Betrachten wir zunächst die Ebene "** service **".

service-layer.png

Webanwendungen sind grob in die folgenden Funktionen unterteilt.

--Anforderungs- / Antwortverarbeitung

Bisher wurden diese Funktionen in einer einzigen Schicht behandelt. Mit dieser Konfiguration erhöht sich die zu handhabende Logik und das Datenmodell wird kompliziert. Eine Klasse wird riesig und die Entwicklungs- / Wartungseffizienz verschlechtert sich.

Trennen Sie jede Funktion und teilen Sie sie in mehrere Ebenen auf.

Die Klasse, die ich gemacht habe, ist übrigens "RestController". Ursprünglich liegt es in der Verantwortung, Anfragen / Antworten zu bearbeiten. Daher wird die andere Verarbeitung unterbrochen und als ** Dienst ** bezeichnet.

Annahme / Umwelt

Laufzeitversion

Spring Dependencies

Entwicklungsumgebung

Vorgehensweise / Erklärung

Controller-Klasse vor Änderung

Ursprünglich habe ich andere Dinge als die Anforderungs- / Antwortverarbeitung ausgeführt, z. B. die Datengenerierung in der Controller-Klasse wie folgt.

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

Serviceklasse

Verschieben Sie den ursprünglich in der Controller-Klasse implementierten Inhalt wie folgt in die Service-Klasse.

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

Kommentieren Sie die Serviceklasse mit dem "@ Service". Dies macht es durch Dependency Injection in der Controller-Klasse verfügbar.

@Autowired
private lateinit var service: MessageService

Das Schlüsselwort lateinit wird verwendet, um eine Instanz zu deklarieren, ohne sie zu initialisieren.

Controller-Klasse geändert

Controller-Klassen, die Serviceklassen verwenden, sollten nur für die Anforderungs- / Antwortverarbeitung verantwortlich sein. Nehmen Sie die folgenden Änderungen vor, um den in der Serviceklasse implementierten Prozess aufzurufen.

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

    @Autowired
    private lateinit var service: MessageService

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

Zusammenfassung / Rückblick

Das Entwickeln von Anwendungen mit separaten Ebenen für jede Verantwortung ist jetzt ein Standard. In diesem Zustand wird die Datenverarbeitung jedoch direkt von der Serviceschicht aus durchgeführt Als nächstes werden wir diesen Teil trennen.

Diese Quelle

Recommended Posts

Feder mit Kotorin ―― 7. Serviceschicht
Frühling mit Kotorin --- 8. Aufbewahrungsschicht
Feder mit Kotorin --5 Aktuator
Frühling mit Kotorin ―― 1. SPRING INITIALIZR
Frühling mit Kotorin - 8 Repository-Schicht - Ergänzung: H2-Datenbank
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
Selbstgemachte Validierung mit Spring
Mit Kotorin ―― 7. Scoping-Funktion
Mit Spring Boot herunterladen
Feder mit Kotorin ―― 3. Auslassen von Wellenklammern aus der Funktion
Ein Memorandum beim Erstellen eines REST-Service mit Spring Boot
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Java-Konfiguration mit Spring MVC
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!
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
Implementierte Authentifizierungsfunktion mit Spring Security ②
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)
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