Day 23 - [Android APP] 01-架构介绍-MVVM

第 23 天,这几天库存真的用完了,所以文章都是最新鲜,当天写的喔!! 剩下 7 天,一起加油吧!

终於来到了最後一个系列「Android APP 系列」,也就是真正装在 Zenbo 上的「长照小帮手 APP」。很久没有认真写一个 APP 了,就当作顺便练习,这次我选用了 MVVM 的架构。这个系列会以「长照小帮手」为例,从 MVVM 架构介绍开始,介绍 MVVM 的各个部分和一些系统中比较特别的功能。

长照小帮手 完整程序码: https://gitlab.com/graduate_lab415/chatbot

MVVM 简介

Android 目前常见的架构有三种 MVC、MVP、MVVM,而官方目前最推的是 MVVM。
MVVM 官方介绍: Guide to app architecture

转换架构的心路历程

其实我早期写 APP 没什麽架构的概念,所有程序码都放在 Activity 里,造成系统一复杂,程序码就很脏、很乱。後来接触了网页框架(CodeIgniter),了解了 MVC 架构,便也试着把概念放到 Android APP 里,用类似 MVC 写了好一阵子。

再後来,专案越来越复杂,经手的人越来越多,程序一样越改越脏。而且大家一开加入时都是新手,架构分的也不一定那麽清楚,专案还是那麽脏。终於有一天,我们决定正式这个问题,开了个读书会,了解 3 个架构的差异後,我们决定选用 MVVM。大家一起从头学,确保理解都一样。

模组间的关系

模组化最重要的用意是每个物件职责分明,修改时只要更动相应的 Class,也方便 Class 重复使用。

mvvm

  • View
    • 负责显示 UI、监听动作
    • 包含 Layout 的 XML、Activity 类、Fragment 类、Adapter 类
    • 不处理逻辑,只负责显示资料,接收到点击事件就请 ViewModel 处理
    • View 和 ViewModel 间通常会使用观察者模式,由 ViewModel 提供 LiveData 给 View 观察,只要观察到有资料变动就更新画面
  • ViewModel
    • 负责提供画面所需资料、逻辑判断
    • 提供 LiveData
    • 依需求向 Model 存取资料
  • Model
    • 负责提供资料
    • 通常会叫做 xxxxxRepository
    • 若是资料有多个资料来源(来自 API、来自 SQLite),Repository 层可以抽象化,变成一个 interface,就像是官方文件上的那样
    • 图片取自: https://developer.android.com/jetpack/guide
      final-architecture

资料夹分类方式

这个好像没有一定欸,我查过网路上很多资料,分类方式不尽相同,但主要都是以模组类型来分类。这部分不需要太纠结,自己定义清楚,找的到东西就好。

我的分类方式:

  • controller: 特殊功能的控制
  • repository: 存取 API 相关
  • utils: 资料物件
  • view: Activity、Adapter
  • viewmodel: ViewModel、Callback

长照小帮手 程序架构

架构



<<:  Day 22 中场休息,来做点酷东西(终於要完成了)

>>:  连续 30 天 玩玩看 ProtoPie - Day 22

【Day 24】- 用方便的 Postman 储存或测试 API

前情提要 昨天带各位用 Selenium 写了自动发留言的 Discord 机器人,可以在指定的文字...

【Day 28】支援向量机(Support Vector Machine, SVM)(上)

今天要介绍的是支援向量机(Support Vector Machine, SVM),它有两个特色,而...

Day 24:一起来建构Min-Heap吧

在实作之前我们先来认识Heap 堆积 (Heap),是一种特殊的完全(complete)二元树,也就...

D-28.鸭子型别, 字串, 阵列, 范围, 杂凑

进入其他基本资料类别前。 想先说明以下观念。 2.7.3 :081 > 1 + 1 =>...

Day20-Props

前言 昨日我们介绍函式组件如何使用,并且学会了JSX灵活的操作。 今天我们来学习很重要的传递资料Pr...