iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
0
Modern Web

最好用的非同步網頁框架!開始用 Ktor 寫 Kotlin Server系列 第 26

[Day 26] 商務邏輯的拆分,來談談 Functional Programming

  • 分享至 

  • xImage
  •  

前面談了很多撰寫功能的部分,不過我們都沒有談到商務邏輯的做法。

今天我們來談談怎麼在 Ktor 裡面處理商務邏輯。

設計模式?

第一次看 Ktor 的時候,有的人可能會有點疑問:為什麼沒有一些框架常有的 ModelViewController 之類的資料夾?

這是因為 Ktor 是可以用 Functional Programming 的方式來撰寫、規劃商業邏輯的。我們可以不像物件導向下,通常會使用某種設計模式來規劃。

下面我們以一個簡單的範例,示範怎麼規劃 Ktor 裡面的商業邏輯。

拆分 Route Function

我們原本的 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 裡面需要包含的邏輯了


上一篇
[Day 25] parallel request ,談 coroutine
下一篇
[Day 27] 繼續談 Functional Programming,怎麼拆分邏輯
系列文
最好用的非同步網頁框架!開始用 Ktor 寫 Kotlin Server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言