有人问我,什么是MVC 设计模式, 我通常说你就是M, 即Model模型
喝口茶,且听我慢慢道来。
MVC设计模式(Model模型-View视图-Controller控制器)一种“软件架构模式”。与开发语言无关,在PHP JAVA .
NET,Python,Ruby的开发中都会用到。不要被“软件架构模式”这样的词吓到,所谓“
软件架构”,就是如何把很多代码组织在一起,而“模式”就是经验的意思。如果你去做促销员,培训老师会教你如何如何与顾客沟通,这些以前成功销售员总结的经验,起个名字就叫模式。
近年来,MVC设计模式在网页开发中应用广泛,事实上MVC 设计模式是一种思想,不只应用在网页开发中,这里我们主要以网页WEB开发为主。主流的WEB开发语言都有很多优秀的MVC框架,如PHP系的Cakephp,Zend FrameWork, JAVA系的Struts,Spring, Ruby系的Ruby on Rails,Python系的Django,本文与PHP为例,通过比喻说明MVC的思想。
第一个比喻:
在一个小型软件公司里,程序员就是Model模型,项目经理就是Controller控制器,销售员就是View视图.
我们来看程序员,项目经理,销售员的关系。项目经理通常不作具体的事,负责工作分配。
项目经理的工作就是将不同的任务合适的分配给不同的程序员,而程序员通常是接到任务后,埋头工作,完成后交给项目经理。而销售员的工作则是将产品以不同的形势包装后出售。
程序员看来是同一个东西的数据库管理程序,销售员能稍做修改后,包装成人力资源
系统,客户
管理系统等等。简单的说:程序员做具体的事,项目经理管工作调度,销售员包装展示产品。这就是MVC。
MVC 翻译为模型-视图-控制器,是字面翻译。我觉得MVC意译为:处理-展示-调度容易理解些。
回到开篇的问题,"有人问我,什么是MVC
设计模式, 我通常说你就是M, 即Model模型"
为什么这么说呢?应为提问的人通常是程序员,程序员就是管做事的,不同的的项目经理可让同一个程序员来做事,就像不同的Controller控制器可以调用同一个Model模型。
第二个比喻:以一个餐馆做比喻。在只有一老板的小店,通常是这样的:你说老板,来碗蛋炒饭,老板收钱后,去厨房炒饭,饭好后给你端上来。一个人搞定,没有
问题。这样的小店还不少。
这就像一些老资格的PHP
程序员,喜欢用VI裸写,在一个文件里搞定一切。
再来看一个大一些的餐馆,因为顾客很多,就有了分工,厨师只管炒饭,有专门的调度人员将不同的订单分配给不同的厨师,有服务员负责上菜。这里厨师就是Model模型,调度人员就是Controller控制器,上菜的服务员就像View视图,同样的蛋炒饭有的顾客要带走,就要用餐盒打包,有的
顾客在餐馆茶馆吃,就要给放到碗里给顾客。至于蛋炒饭要不要打包,厨师不管,就像Model层负责返回数据,至于以PDF或是HTML展示,这是VIEW层的
工作。
在MVC 设计模式中,提倡分工和专注。也就是说,各个角色做好本职工作,而不提倡越俎代庖。第一个软件公司的比喻来说,项目经理管工作分配的就不用做具体事,程序员做具体的事就不要管工作分配。
现在,
PHP,JAVA,Ruby,Python等开发语员都有现成的框架可用。通过使用这些框架可以帮助程序员很好的应用MVC设计模式,
这里要着重说一点:使用了现成的框架不等于应用了MVC设计模式,不使用框架不等于没有是用MVC模式。
以PHP开发为例,好的程序员,不用框架MVC也分的清清楚楚。而有的程序员即使用了像Cakephp这样的框架,MVC也分不清楚,如在Controller里过多的逻辑处理代码,还有就是硬输出HTML标记。正确的办法是,Controller只负责对象函数调用,冗长的逻辑处理代码放到Model,Model处理逻辑后返回数组,变量或是对象,Model和Controller不要直接输出
HTML标记。简单的说在Model 和 Cont