前面談了很多撰寫功能的部分,不過我們都沒有談到商務邏輯的做法。
今天我們來談談怎麼在 Ktor 裡面處理商務邏輯。
第一次看 Ktor 的時候,有的人可能會有點疑問:為什麼沒有一些框架常有的 Model
、View
、Controller
之類的資料夾?
這是因為 Ktor 是可以用 Functional Programming 的方式來撰寫、規劃商業邏輯的。我們可以不像物件導向下,通常會使用某種設計模式來規劃。
下面我們以一個簡單的範例,示範怎麼規劃 Ktor 裡面的商業邏輯。
我們原本的 route 大概都是寫在 Application.kt
裡面:
get("/html-dsl") {
call.respondHtml {
body {
h1 { +"HTML" }
ul {
for (n in 1..10) {
li { +"$n" }
}
}
}
}
}
如果 route 一多,Application.kt
自然就變的很多。
我們可以將函式拆分出來:
get("/html-dsl") {
htmlDsl()
}
suspend fun PipelineContext<Unit, ApplicationCall>.htmlDsl() {
call.respondHtml {
body {
h1 { +"HTML" }
ul {
for (n in 1..10) {
li { +"$n" }
}
}
}
}
}
然後將 htmlDsl()
移動到 HtmlDsl.kt
裡面:
import io.ktor.application.*
import io.ktor.html.*
import io.ktor.util.pipeline.*
import kotlinx.html.*
suspend fun PipelineContext<Unit, ApplicationCall>.htmlDsl() {
call.respondHtml {
body {
h1 { +"HTML" }
ul {
for (n in 1..10) {
li { +"$n" }
}
}
}
}
}
這樣一來,我們就可以減少 Application.kt
裡面需要包含的邏輯了