我們花了點時間講了怎麼使用 Ktor 3 建立專案與部署專案。也和其他的後端框架,包含了PHP、Python,還有其他 Java 世界的框架,像是 Spring Boot、quarkus 等進行比較。
今天我們來聊聊 Ktor 的設計邏輯是什麼,以及 Ktor 是怎麼實作這樣的邏輯,以及這樣的邏輯有哪些特點,適用哪些場景。
回到官網「Why Ktor?」段落,我們可以看到 Ktor 的特點有
可以看到,Ktor 並不以完整的功能作為賣點,而是以利用協程達成異步,輕量化和彈性作為賣點。
要達成輕量化的效果,Ktor 引入了一個設計邏輯,那就是「所有功能都是外掛」。
根據這個服務所需要的功能,我們引入對應的外掛。
這樣一來,雖然系統的開發會複雜一點點,我們就可以保證最後的功能都是系統所需要的功能。
要達成這個效果,我們可以看看專案是怎麼建立起來的
我們看到專案的 main()
fun main(args: Array<String>) {
io.ktor.server.netty.EngineMain
.main(args)
}
這邊純粹只是建立了 io.ktor.server.netty.EngineMain
,
所以剩下的功能,我們都要透過 extension function 的方式, 定義在 Application.module()
裡面
fun Application.module() {
configureSerialization()
configureDatabases()
configureRouting()
}
這樣的寫法,利用了 Kotlin 語法的 extension function,在沒有作任何依賴注入框架的狀況下,還是能夠初步的將功能作區分。
和其他 Java based 的框架相比,由於 Java 語法的特性,要能夠作功能區分很常會選用依賴注入框架,加上 annotation class 的寫法。
這樣一來框架就必須要實作依賴注入的功能。
這部份也是 Ktor 可以比起許多 Java based 框架要更輕量的原因。
今天的部分就提到這邊,我們明天見!