---
# System prepended metadata

title: 4/22 (五)

---

# 4/22 (五)


:::warning
- iOS: MVC -> MVVM
- web: HTML+CSS -> Redux 資料流概念 -> MVVM+Redux (playcraft 之前的架構) -> pure MVVM (playcraft 現在的架構)
- (iOS + Android) app Launch 進入點(app 開啟之後做了哪些事)
- 各平台的 layout system for each platform
- error handling (Kotlin + JS)
- ~~MVVM (android 教學)~~
- @Ralf & @Isaac 教學 `*` `&` (C++)
- @Ralf 說要研究 js 的 null & undefined & ??
- 版號使用
:::


## Android architect
- mobile -> MVP 
- androidTV -> MVVM 

![](https://i.imgur.com/8G2mivt.png)

- View 對上 presenter 會有一個 Interface, PaaSContract.View
- 所以 presenter 要對 View 操作是用那個 Interface
- presenter.init 時會把 callback function 塞進 model
- 所以 model 資料更新時，呼叫 callback 觸發 presenter 的方法


## 如果你想要看 playcraft 專案

- Model: `PaaSModel`
- Presenter: `PaaSContract`
- View: `PaaSView`


#### presenter v.s. controller ?


## MVVM (Android)

- rx = ReactiveX
    - rxJava
    - rxSwift
    - rxJS
- Android 有在用 rx ？ 有，用 LiveData 做 data binding 使用 MVVM
- `LiveData` rx 機制, View 要去 observe 他
- `ViewModel` = presenter 的角色 (life cycle 不一樣)
- View 在生成的時候，presenter 會跟著一起生出來，所以 presenter 的生命會被 View 綁著！！
- 狀態應該是會被放在 ViewModel 裏

```
class HomeActivity {
    
    var myViewModel
    
    func onAppear() {
        self.myViewModel = ViewModel.init()
    }
}
```


## app Launch 進入點

#### web webpage life cycle
1. html 會有 head body 
1. head metadata 抓 library
1. body 才是真正網頁會看到的畫面，就是 MVC, MVP 的 View
1. body 會寫 JS code，JS code 才會去建那些 model

==Ralf 會再詳細解釋==

#### android 
1. 

#### iOS
1. 


## layout system
* 不同的 device system 
* 排版要怎麼調整畫面上的元件
* 絕對位置、相對位置
* 網頁是堆疊、畫面不夠才會換到第二行
* 概念上不太一樣

