1
manoon 2013-07-10 16:19:06 +08:00
PHP都已经忘记了。
如果在PYTHON里面的话,我是这样理解的。M只负责数据。C负责操作。 |
2
octopus_new OP @manoon 那就是说,如果在python里面的话,C就应该负责CRUD(如果用sql的话),而M则作为数据与业务之间的连接层?还有就是MVC应该只要是OO语言就差不多吧。
因为我是看国外的一些文章是说应该让M做尽量多的事情,而C应该尽量轻。如果CRUD都给C的话,势必无法达到上述效果。而且看了一些国内的代码,好像也都是C负责CRUD,难道是我理解有问题...... |
3
xunyu 2013-07-10 16:29:13 +08:00 1
我也只有python的MVC框架,php的没有,可以参考下,在https://github.com/xunyuw/2in.me
感觉上M的功能是只有数据,还有封装模板,route的都在c里面实现 |
4
octopus_new OP @xunyu 恩,Route应该是在C里实现,我现在就是对于数据库的一些操作是否应该放到C里面感到困惑。比如我要查询某个用户的信息,那么数据库的query应该在M层,还是C层发起呢?
|
5
moxuanyuan 2013-07-10 16:43:31 +08:00
我一直都有这个confusion
|
6
xunyu 2013-07-10 16:48:22 +08:00 1
@octopus_new 应该是c层发起,然后存放到M中,之后直接从M中取,举个开车的例子,m就是汽车,c是司机,应该是由c做总体控制
|
7
octopus_new OP @moxuanyuan 我以为只有我一个人呢,原来还有同路人,那就一起同问吧:)
|
8
xunyu 2013-07-10 16:51:51 +08:00 1
我对MVC的见解是这个模型更贴近数据驱动而不是面向对象,在M里面放入不同的数据模型,让通过c来取到数据以后根据模型的不同实现v显示上的差异
|
9
octopus_new OP @xunyu 非常感谢,我又去看了一下tutsplus上的一篇文章,结合你说的,感觉理解。
响应用户request的query在C,然后C交给M去做,是这个意思吧? |
10
shinwood 2013-07-10 17:08:55 +08:00
严格来说,Controller 只负责分发 URL 以及将数据整合后传递给 View,和数据库交互这部分应全部交给 Model。
|
11
Aether 2013-07-10 17:09:44 +08:00
我的理解是至少要涉及数据库的,都放在M里封装的。
这个时候C的数据操作看上去都是抽象的。 你可以把一些复杂的数据逻辑放在M里,这个时候被封装的部分尽量是黑箱的,可复用的。这个时候c只负责把各处收集来的信息作为参数传入(c的作用不正是这个么) |
12
octopus_new OP |
13
shinwood 2013-07-10 17:36:26 +08:00 1
@octopus_new 对,是这个意思,但一般 userlist 作为单独的 controller 有点奇怪,作为 controller 的一个 function 听起来比较合适,比如 /member/list,这当中的 list 为你说的 userlist 功能。
|
14
octopus_new OP @shinwood 真的是非常感谢:), 消除了我这几天来的疑惑。我其实是想说userList是controller的一个方法的,想着想着就打错了......
|
15
Aether 2013-07-10 18:00:22 +08:00 1
@octopus_new 我没啥要表达的了,@shinwood 都说完啦。
另外我对MVC的理解主要都是基于我对CodeIgniter的把玩,其他框架没试过。CI很简洁,适合新手,你可以研究一下,稍微看看一下源代码,自己做一些实例就理解了。 |
16
lichao 2013-07-10 18:10:49 +08:00
我直到接触 Ruby on Rails 才真正理解 MVC
|
17
octopus_new OP |
18
ivanlw 2013-07-11 00:46:12 +08:00
Python不应该是很多MTV的么…………Django, Flask
|
19
ETiV 2013-07-11 01:00:06 +08:00 via iPhone
我理解的MVC是一种代码的组织结构
目的是为了「少写重复的代码」 所以数据相关的操作都归类到M中,这样所有的C都可以调用M中的操作。 |
20
raincious 2013-07-11 07:37:24 +08:00
也有类似疑问的路过。
比如有一个postController和一个replyController,他们操作一个postsModel。 但是现在如果有共用的函数,比如isValidTitle以及isValidBody,那么是在哪里实现比较好呢? 现在看当然是放在postsModel里面最好,通过参数返回错误回交给Controller处理就好。但有些文章直接说Model应该只负责跟数据库沟通就好了,属于只做事但不问问题的,这些应该放在Controller里。不过,如果照做,那么Controller里面必然会出现重复代码的啊。 |
21
kakaryan 2013-07-11 10:10:03 +08:00
@raincious 在Controller和Model之间应该封装一个业务层,业务层封装业务逻辑,在业务层去调用Model层,Controller不直接调Model.业务逻辑都封装到Model会导致Model越来越臃肿,也是不合适的.
|
22
66beta 2013-07-11 10:14:23 +08:00
比较流行的框架,比如laravel和CI,都是主张C制作跳转,M做数据处理(验证之类的)
Laravel的route更加减轻了C的工作 |
24
shinwood 2013-07-11 10:53:45 +08:00
@octopus_new gmail 地址即 shinwood at gmail.com
|