[問題] 請問一個MVC的實際案例

看板AndroidDev作者 (q374077)時間9年前 (2016/04/04 09:17), 9年前編輯推噓4(4036)
留言40則, 6人參與, 最新討論串1/3 (看更多)
越google越懷疑自己到底有沒有懂 架構是android->php->mysql 我在android端寫幾個controller (就是各種SQL,select A、select B WHERE x = y 之類的) 寫一個php在local server做model接收和發送資料給controller view的工作就是把controller丟回來的結果用json解析,表格或條列,顯示給使用者 好處是資料安全和可以各自分開編寫,對大型專案有利 壞處是比較複雜 請問我這樣對mvc的架構算是了解了嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.21.158 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1459732670.A.BC6.html

04/04 09:19, , 1F
不是這樣吧…
04/04 09:19, 1F
是哪裡不正確嗎?

04/04 11:26, , 2F
我覺得算是mvc了
04/04 11:26, 2F
我也覺得阿... 還是其實mvc架構比較像是一個申論題? 大概60%像就好,剩下40%要看帥不帥 ※ 編輯: q374077 (42.72.20.193), 04/04/2016 11:44:25

04/04 11:44, , 3F
http://tinyurl.com/j7kc2lc MVC只在pres.層
04/04 11:44, 3F

04/04 13:42, , 4F
"就是各種SQL",通常SQL只會在model層
04/04 13:42, 4F

04/05 09:30, , 5F
controller 只負責呼叫 model 把撈回來的資料送給 view
04/05 09:30, 5F

04/05 09:30, , 6F
不應該包含太複雜的邏輯 sql 就更不用說了 完全不能放
04/05 09:30, 6F

04/05 09:30, , 7F
以你的例子來說
04/05 09:30, 7F

04/05 09:30, , 8F
String str = android.getData(xxx.php);
04/05 09:30, 8F

04/05 09:30, , 9F
android.setText(str);
04/05 09:30, 9F

04/05 09:30, , 10F
controller 裡面只能有這兩行 可以呼叫多個 model
04/05 09:30, 10F

04/05 09:30, , 11F
再將結果傳給另一個 model 但 model 之間不能呼叫彼此
04/05 09:30, 11F

04/05 09:30, , 12F
也因為如此才需要 controller 操作整合
04/05 09:30, 12F

04/05 09:30, , 13F
就字面上的意義來說 就是控制器 控制資料處理流程
04/05 09:30, 13F

04/05 09:30, , 14F
以及資料間的交換 controller 寫得好 才表示真的懂 MVC
04/05 09:30, 14F
所以以資安角度 我現在是SQL放在User端的controller,也就等於沒有解決資料安全的問題 把SQL放在DB端的model,用controller呼叫才解決安全的問題,mvc才真正有運作囉? ※ 編輯: q374077 (114.136.175.69), 04/05/2016 15:26:27

04/05 17:18, , 15F
以我的理解是Android有自己的MVC,MVP或MVVM..等架構,後
04/05 17:18, 15F

04/05 17:18, , 16F
端有自己的MC架構(不一定有V)
04/05 17:18, 16F

04/05 20:48, , 17F
資安是資訊安全 不管放在哪裡都跟資安沒關係
04/05 20:48, 17F

04/05 20:48, , 18F
當然如果你放在 js 內就有關係了
04/05 20:48, 18F

04/05 20:48, , 19F
以 SQL Injection 來說 是要在使用參數產生 sql 語法前
04/05 20:48, 19F

04/05 20:48, , 20F
處理參數的內容 避免產生問題 例如雙引號
04/05 20:48, 20F

04/05 20:48, , 21F
MVC的重點在於不論你今天是要做 web, client-server
04/05 20:48, 21F

04/05 20:48, , 22F
還是單純的 API,要更改的部分只有 controller 跟 view
04/05 20:48, 22F

04/05 20:48, , 23F
model 的部分可以說是幾乎不用修改的
04/05 20:48, 23F

04/05 20:48, , 24F
只要把原本吐給 template 的 controller 改成吐 json
04/05 20:48, 24F

04/05 20:48, , 25F
就變成 api 反之亦然 跟 model 沒有什麼關係
04/05 20:48, 25F

04/05 20:48, , 26F
這就是 MVC 的其中一個目的 因此你再想想
04/05 20:48, 26F

04/05 20:48, , 27F
把 sql 寫在 controller 內 當你需要使用相同資料
04/05 20:48, 27F

04/05 20:48, , 28F
吐給不同目標時 會不會需要重新寫一次 sql?
04/05 20:48, 28F

04/05 20:48, , 29F
因此在學 MVC 時可以不斷反問自己 這樣做的話
04/05 20:48, 29F

04/05 20:48, , 30F
未來是不是可以很輕鬆的遷移程式碼
04/05 20:48, 30F

04/05 20:48, , 31F
如果不行 那可能就是不正確的 設計
04/05 20:48, 31F

04/05 20:48, , 32F
要注意能夠互相聯絡的只有 controller
04/05 20:48, 32F

04/05 20:48, , 33F
Model 間是彼此獨立的 避免未來修改被影響到
04/05 20:48, 33F

04/05 20:48, , 34F
例如讀檔案 原本寫成在一個 model 呼叫讀取檔案 model
04/05 20:48, 34F

04/05 20:48, , 35F
之後再解析內容取得資料 如果資料來源從電腦改成網路
04/05 20:48, 35F

04/05 20:48, , 36F
那這個 model 就廢了 反之如果是從 controller 呼叫
04/05 20:48, 36F

04/05 20:48, , 37F
讀取資料的 model 再傳給資料解析的 model
04/05 20:48, 37F

04/05 20:48, , 38F
這樣不管資料來源怎麼改 資料解析的 model 都不用修改
04/05 20:48, 38F

04/05 20:48, , 39F
因此不斷的反問自己 當環境改變時是不是可以順利轉移
04/05 20:48, 39F

04/05 20:48, , 40F
這樣一來就可以慢慢上手了
04/05 20:48, 40F
感謝k大! 這真的很煩惱~k大的問題我的答案居然都是"是"... 不同目標要重寫sql-->是 很輕鬆遷移程式碼-->是 互相聯絡的只有controller-->是 model間互相獨立-->是 資料來源從電腦改成遠端model就廢了-->是 因為我想法是mysql和sqlite語法還是有些不同,所以把sql寫在controller 還可以讓local DB和remote DB互相溝通...要用的時候只是呼叫不同api就好說... 恩~~~怎麼會這樣勒... 我再去找找看有沒有用在android-php-mysql的實例 可能是我對controller的定義有誤... ※ 編輯: q374077 (223.136.96.188), 04/06/2016 17:01:33
文章代碼(AID): #1N0S2-l6 (AndroidDev)
文章代碼(AID): #1N0S2-l6 (AndroidDev)