iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 9
0

官方推薦 Ktor 程式操作資料庫使用 Exposed 框架。

https://github.com/JetBrains/Exposed
https://github.com/h2database/h2database

除了 github 上標明的 release 版本,有時候也會參考實際上大家對各版本的引用情形。

https://mvnrepository.com/artifact/com.h2database/h2

https://ithelp.ithome.com.tw/upload/images/20200918/201291976TJmwh4Kmo.png

程式操作資料庫的 Exposed 框架雖然還沒有 1.0 的版本,但是據 JetBrains 相關人員表示沒有什麼大問題,可能是想和其他產品聯合華麗發布正式版,也有可能還沒決定好 Library 的名稱。

總之在 build.gradle 檔案的 dependencies 區域加上資料庫支援。

    implementation "org.jetbrains.exposed:exposed-core:$exposed_version"
    implementation "com.h2database:h2:1.4.200"

exposed_version 的設定放在專案的 gradle.properties

exposed_version=0.27.1

https://ithelp.ithome.com.tw/upload/images/20200918/20129197iQhKdoW6bf.png

正打算照搬 github 上範例,發現還有 DAO 支援套件, DAO (Data Access Object) 利用抽象介面的物件 Entity 操作資料庫,也就是說連 Select Insert Where GroupBy 這類 SQL 的語法都可以丟在一邊不管了,可以改用 new findById 這類物件語法。

//原本的寫法 
Topics.insert { //Topics -> Table 類別
            it[title] = request.title
            it[description] = request.description
        }
//新寫法
val data = transaction {
                val topic = Topic.new { //Topic -> Entity 類別
                    title = request.title
                    description = request.description
                }
            }
implementation "org.jetbrains.exposed:exposed-dao:$exposed_version"

在我快樂的建立各個 table 的關係時,發現一個問題!那就是官網多人聊天室的範例連結是錯的。

https://ktor.io/docs/guides-chat.html
https://ktor.io/docs/app-chat.html

https://ithelp.ithome.com.tw/upload/images/20200918/2012919789Y903DxJj.png

https://ithelp.ithome.com.tw/upload/images/20200918/20129197zLepw0QmxJ.png

花了點時間找到正確的路徑,卻發現是用 websocket 實作的,在這個時候非常非常懷念 Firebase 的 realtime database 。
https://github.com/ktorio/ktor-samples/tree/master/generic/samples/chat

在我煩惱的時候,老姐卻是快樂的哼著歌。

她用了 google 提供的圖庫。
https://material.io/resources/icons/?style=baseline
https://ithelp.ithome.com.tw/upload/images/20200918/20129197V0Q8WkBGjh.png

還用了 cards 元件來製造陰影和圓角。
https://material.io/components/cards

<com.google.android.material.card.MaterialCardView
        android:id="@+id/card"
        android:theme="@style/Theme.MaterialComponents.Light"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/topic_margin"
        app:cardCornerRadius="@dimen/topic_margin"
        app:cardElevation="@dimen/topic_margin" >
        <!-- 原本的 layout 直接放進來 -->
</com.google.android.material.card.MaterialCardView>

https://ithelp.ithome.com.tw/upload/images/20200918/20129197mmg8XiAXIR.png

整個 App 的質感上升許多。

雖然美化 UI 的確要花時間,但是成果令人滿意。

看起來老姐真的有用心在這個專案上呢。

本次鐵人賽的作品在放進更多內容後已經成書,書名是《老姐要用Kotlin寫專案:從 Server 到 Android APP 的開發生存日記》,歡迎購買唷。https://www.tenlong.com.tw/products/9789864348978


上一篇
做出選擇的第八天:H2 資料庫,就決定是你了
下一篇
美美畫面的第十天:把函式當參數 OnRecyclerItemClickListener
系列文
老姐好像要用 Kotlin 寫專案,能撐30天嗎?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言