论坛风格切换
  • 4067阅读
  • 2回复

MVC里边的各个模块的职责-个人观点 [复制链接]

上一主题 下一主题
离线rickyleo
 

发帖
315
金币
0
威望
99
只看楼主 倒序阅读 使用道具 楼主  发表于: 2012-01-29
个人的 blog系统现在已经进展到了一定的阶段,有一些个人的想法。
通过这段时间的blog系统代码编写,自己培养了一定的代码编写管理的规范,以下是个人对ThinkPHP里边MVC模式的理解。

MVC:model(模型)+view(视图)+controller(控制器)
controller控制器:它的角色就是为了协调model和view的中间件。从view拿数据给model,model处理并控制DAO和数据库交互返回一个信号再通过controller回馈给view显示告诉用户程序做了什么,这个可以表示为view->controller->model->db;另外一种情况是controller告诉model它需要什么数据,然后model通过DAO从数据库抓取相关的数据通过一定的形式回馈给controller,让controller决定用哪个view来显示这部分数据,刚说的一定形式的原则是最底层的数据要以最原始的数据为准,因此model在获取DAO返回的原始数据的时候,可以组装成一定形式的数组,这种形式的数组可以供多个controller调用它的数据源。然后各个controller获取这个统一格式的数据的时候可以做个性化的组装或者controller不用负责这个工作,可以将这个工作交给更擅长数据表现形式的view来做,这个时候controller只要负责数据的适当过滤处理即可。

model模型:它的角色就是一个辛勤的劳动者,接受controller的指令,controller告诉他做什么他就做什么,controller不用关心model具体是怎么完成这个任务的,controller只要告诉model做什么,controller要拿到什么。所以model就必须自己想办法通过相关的DAO去处理这个事情并以最快最准确的方式将controller要的东西给他,他就完成任务了。这样下来,model就是一直和控制器controller和数据库DB交互的中间件了。把数据库DB当作一个生产资料的仓库,model从里边拿最原始的材料,经过适当的加工成半成品,将这个半成品交给控制器controller,controller对半成品做适当的封装交给一线的view进一步完善并表现到前端。model很累,代码量应该会比较庞大。

view视图:它的角色就是从controller获取半成品或者是成形的数据通过自己擅长的丰富的表现形式展示给用户,另外他还负责从用户那里拿到controller想要获取到的数据。人机交互的重要工作就交给了view来完成了。责任也是相当重大的。

好了!那么我们看看MVC这种模式在日常生活中是否常见呢?那是当然,否则也没有存在的价值。
比如,一个人一个有机体。他需要或者就需要不断的吃、喝、拉等等。然后看下人是否可以套用MVC这种模式呢?当然可以的,只不过这个会非常的复杂。由很多个MVC在运转。
最大的控制器就是人的大脑。他是一个控制器的总部,里边藏着很多的控制器,一个个想法都是一个个控制器,想法怎么实现那个是相关的model负责,那么这个view在什么地方呢?假如一个人要把自己打扮的帅一点,那么view就是他的外表;如果要自杀,砍自己一刀,那么他流的血和伤口就是view。很大一部分的model的工作由人类的手,脚和身体内部的一个个器官完成。以上比较抽象的,那么再看:
你身上的肉,血液假想成DB数据库,所有想存储的营养物质的集合地。身体的消化系统、吸收系统、泌尿系统等等都是一个个model模型,都负责和营养物质即假想的DB数据库进行交互,进食的时候消化食物,吸收营养并存储,肚子饿没东西吃的时候,化解营养物质提供能量,这个时候控制器我们自己控制不了,由自身的植物神经完成这个调度。高中的生物了忘记了,好像是说是植物神经来着。进食的时候你的手就是控制器controller,怎么吃你的嘴巴就是模型model,view就是你的嘴巴在哪里,张的够不够大。

以上是个人对MVC模式的简单看法。MVC可以帮助开发促进效率,维护节省成本,当然最重要的是规范化管理你的代码,团队开发的情况下就不会乱,一个个模块大家一份。按照一定的代码开发规范,你要什么方法直接到固定的位置去找下获取别人已经帮你写好了你直接拿过来用。或者你写一个别人一定会需要这个方法的,到时候别人要用的时候直接拿过去用。当然出了问题,大家都可以修改完善。这个就是个人觉得MVC带给我们的便利.

更多的见解期待跟帖回复…


1条评分金币+20
mgarfield 金币 +20 给你个好评哦亲~ 2012-01-29
离线mgarfield

发帖
520
金币
0
威望
62
只看该作者 沙发  发表于: 2012-01-29
哈哈。写的很生动。
个人认为mvc最大的优势是代码复用。面向对象编程里最重要的思想是封装、继承、多态,归根到底应该是为了解决大型软件编写过程中代码维护和多人协作的难题。封装让接口规范统一,所有人都面向接口编程,继承和多态解决了代码复用的问题。在此基础上演化出很多的设计模式,其实就是对封装、继承、多态的进一步抽象,对特定问题形成较为合适的解决方案。

mvc提供了一个适合web开发的模式。当然对每一层的功能职责划分还是要针对不同的应用场景做更加细致的分析。实际应用中最大的问题是c层过于庞大,m反而显得比较轻量级,当然这些都是仁者见仁智者见智,大家可以一起探讨
1条评分金币+10
rickyleo 金币 +10 哥 高度不一样啊 学习了 2012-01-29
离线rickyleo

发帖
315
金币
0
威望
99
只看该作者 板凳  发表于: 2012-01-29
哥 高度不一样啊 学习了
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
提到某人:
选择好友
上一个 下一个