iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 11
0
Mobile Development

30天,從0開始用Kotlin寫APP系列 第 11

Day 11 | 開發架構演化史: MVC -> MVP -> MVVM

  • 分享至 

  • xImage
  •  

前面 10 天介紹了很多 Kotlin 的基本語法和概念,學習基礎語法的過程中會因為缺乏 UI 的互動性,因此學習的過程中會覺得比較枯燥,但應用都是要從根基打起的,如果根基沒打穩,那在撰寫的過程中就會很難摸到語言的精髓,就像我寫 3 個月的 Kotlin 才發現可以使用 Extension Function 一樣 (掩面...

好!不要灰心!
原本這個系列文的出發點就是要用 Kotlin 寫 App ,因此今天要開始往 Android 的領域靠近了,讚讚

Android Studio

Day 03 的時候已經探討過目前會常常用來寫 Kotlin 的 IDE 有哪些,其中 EclipseIntelliJ IDEAAndroid Studio 都是時常拿來開發 Android App 的 IDE

而其中我最喜歡使用的是 Android Studio ,有以下幾個原因

  1. 免費(很重要!!!
  2. JetBrains 有開發很多 IDE ,因此很了解開發者需求與尿性
  3. 因為和 Google 共同開發,因此有內嵌 Google Service 的 SDK ,例如 Firebase 等等

Install

如何 Install Android Studio 在官網上都有詳細介紹,有需要的可以到以下的網址查看

另外,目前 Android Studio 3 之後, Kotlin 已經是內建支援的語言了,因此不用另外做安裝或加入 Plugin
但如果是 Android Studio 3 以下或是專案是從 Java 轉去 Kotlin 的用戶們,可以參考我以前寫過的這篇,將 Kotlin 導入專案中

希望完成的目標

這次是想重現一個傳奇的 App ,目前有一位知名導演位這個大作代言過,那就是...

海賊爭霸 Online 啦!!!

畢竟流量就是一切,所以也要蹭一下。目前已經有 海賊爭霸 Online - 下載就送 S 級火槍兵 上架到 Play Store, 有 4.6 顆星和 1 萬次下載,那這次就只是要來練個技術,就會用以下的技術向這個大作致敬

  1. MVVM
  2. DataBinding
  3. LiveData
  4. Room
  5. Retrofit
  6. Kotlin Coroutines
  7. Material Design
  8. Stetho

那下面的技術是我還沒有用過的,但很想試試看的,因此希望可以趁這個機會練習(有點抖R... QQ)

  1. Dagger 2
  2. RxKotlin

具體該怎麼做也只有一個簡單的概念,這幾天會在把具體架構想的更清楚,如果有用到其他的技術會再一一補上

MVC \ MVP \ MVVM

相信現在開發者至少會知道 MVC \ MVP \ MVVM 其中一種,那這些架構會被設計出來,其實目的只有一個,就是希望能夠減少程式中模組的 Dependency 、更好維護與 Debug、提高開發效率以及讓新進的開發者更容易上手,因此選擇哪個架構不是最主要的,而是要適合團隊並且不要把原本設定的架構寫的像是其他架構,最後一整個四不像就不好了

MVC

  • View: 畫面佈局的 XML
  • Model: 數據的獲取、儲存以及數據狀態變化
  • Controller: 處理 View 和 Model 之間的數據邏輯與流向, Ex. Activity,Fragment

Android 本身設計上還是符合 MVC 架構,但 Android 作為 View 的 XML 並不強,因此很多 View 的邏輯就會寫在 Activity 或 Fragment 之中,造成 View 和 Controller 之間的角色不夠差分清楚,因此 MVC 架構最後會偏向 Model - (View & Controller) 的方向發展

MVP

  • View: 畫面佈局的 XML 、元件的繪制(例如程式判斷 Button 要 visiable 或是 gone)和處理使用者的操作
  • Model: 同 MVC 的 Model 層
  • Presenter: 處理 View 和 Model 之間的數據邏輯與流向

MVP 基本上與 MVC 大同小異,只差在將 Controller 換成了 Presenter ,那 Presenter 的出現就是要解決 MVC 中 ViewController 之間無法差分清楚的狀況,作法是 Presenter 持有 View 的接口,如果要更新 View 會透過接口進行操作,並讓 Activity
加到 View 中,達到解耦的功效

Presenter 中主要是負責數據邏輯處理與流向,因此 Presenter 也會有 code 臃漲的問題,並且 ViewPresenter 之間雖然透過接口溝通,但還是存在一定的耦合性,一旦 View 中有元件更改了,那麼對應的接口就要更新,因此如果這曾也能夠解耦會更好

MVVM

  • View: 同 MVP 的 View 層
  • Model: 同 MVC 的 Model 層
  • View Model: 負責 View 和 Model 之間的數據交換和業務邏輯

MVVM 的設計思維與目標與 MVP 相似,但會在透過 Data Binding 自動將資料綁定到 View, ViewModel 不會持有 View,整體架構上也會更靈活

結語

那麼 MVC -> MVP -> MVVM 是一串演化的過程,目的就如同開頭所說的:好開發與解耦合

那今天身體不太舒服,因此明天才會更深入介紹 MVVM 的部份,今天先讓我賣個關子吧~

Reference


上一篇
Day 10 | Kotlin 的物件導向程式設計(Object-oriented programming, OOP)- Part 2( 完結 )
下一篇
Day 12 | 建立 Kotlin Projcet 與定義海賊爭霸規格
系列文
30天,從0開始用Kotlin寫APP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言