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 **".
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 **.
Spring Dependencies
À 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())
}
}
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.
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()
}
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.
Recommended Posts