作者q374077 (q374077)
看板AndroidDev
标题[问题] 请问一个MVC的实际案例
时间Mon Apr 4 09:17:47 2016
越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://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1459732670.A.BC6.html
1F:→ MIM23: 不是这样吧… 04/04 09:19
是哪里不正确吗?
2F:推 ckvir: 我觉得算是mvc了 04/04 11:26
我也觉得阿...
还是其实mvc架构比较像是一个申论题?
大概60%像就好,剩下40%要看帅不帅
※ 编辑: q374077 (42.72.20.193), 04/04/2016 11:44:25
4F:→ ssccg: "就是各种SQL",通常SQL只会在model层 04/04 13:42
5F:推 kiwatami: controller 只负责呼叫 model 把捞回来的资料送给 view 04/05 09:30
6F:→ kiwatami: 不应该包含太复杂的逻辑 sql 就更不用说了 完全不能放 04/05 09:30
7F:→ kiwatami: 以你的例子来说 04/05 09:30
8F:→ kiwatami: String str = android.getData(xxx.php); 04/05 09:30
9F:→ kiwatami: android.setText(str); 04/05 09:30
10F:→ kiwatami: controller 里面只能有这两行 可以呼叫多个 model 04/05 09:30
11F:→ kiwatami: 再将结果传给另一个 model 但 model 之间不能呼叫彼此 04/05 09:30
12F:→ kiwatami: 也因为如此才需要 controller 操作整合 04/05 09:30
13F:→ kiwatami: 就字面上的意义来说 就是控制器 控制资料处理流程 04/05 09:30
14F:→ kiwatami: 以及资料间的交换 controller 写得好 才表示真的懂 MVC 04/05 09:30
所以以资安角度
我现在是SQL放在User端的controller,也就等於没有解决资料安全的问题
把SQL放在DB端的model,用controller呼叫才解决安全的问题,mvc才真正有运作罗?
※ 编辑: q374077 (114.136.175.69), 04/05/2016 15:26:27
15F:推 sean0430: 以我的理解是Android有自己的MVC,MVP或MVVM..等架构,後 04/05 17:18
16F:→ sean0430: 端有自己的MC架构(不一定有V) 04/05 17:18
17F:推 kiwatami: 资安是资讯安全 不管放在哪里都跟资安没关系 04/05 20:48
18F:→ kiwatami: 当然如果你放在 js 内就有关系了 04/05 20:48
19F:→ kiwatami: 以 SQL Injection 来说 是要在使用参数产生 sql 语法前 04/05 20:48
20F:→ kiwatami: 处理参数的内容 避免产生问题 例如双引号 04/05 20:48
21F:→ kiwatami: MVC的重点在於不论你今天是要做 web, client-server 04/05 20:48
22F:→ kiwatami: 还是单纯的 API,要更改的部分只有 controller 跟 view 04/05 20:48
23F:→ kiwatami: model 的部分可以说是几乎不用修改的 04/05 20:48
24F:→ kiwatami: 只要把原本吐给 template 的 controller 改成吐 json 04/05 20:48
25F:→ kiwatami: 就变成 api 反之亦然 跟 model 没有什麽关系 04/05 20:48
26F:→ kiwatami: 这就是 MVC 的其中一个目的 因此你再想想 04/05 20:48
27F:→ kiwatami: 把 sql 写在 controller 内 当你需要使用相同资料 04/05 20:48
28F:→ kiwatami: 吐给不同目标时 会不会需要重新写一次 sql? 04/05 20:48
29F:→ kiwatami: 因此在学 MVC 时可以不断反问自己 这样做的话 04/05 20:48
30F:→ kiwatami: 未来是不是可以很轻松的迁移程式码 04/05 20:48
31F:→ kiwatami: 如果不行 那可能就是不正确的 设计 04/05 20:48
32F:→ kiwatami: 要注意能够互相联络的只有 controller 04/05 20:48
33F:→ kiwatami: Model 间是彼此独立的 避免未来修改被影响到 04/05 20:48
34F:→ kiwatami: 例如读档案 原本写成在一个 model 呼叫读取档案 model 04/05 20:48
35F:→ kiwatami: 之後再解析内容取得资料 如果资料来源从电脑改成网路 04/05 20:48
36F:→ kiwatami: 那这个 model 就废了 反之如果是从 controller 呼叫 04/05 20:48
37F:→ kiwatami: 读取资料的 model 再传给资料解析的 model 04/05 20:48
38F:→ kiwatami: 这样不管资料来源怎麽改 资料解析的 model 都不用修改 04/05 20:48
39F:→ kiwatami: 因此不断的反问自己 当环境改变时是不是可以顺利转移 04/05 20:48
40F:→ kiwatami: 这样一来就可以慢慢上手了 04/05 20:48
感谢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