Heim > Artikel > Backend-Entwicklung > 理解Zend Framework 的MVC模式_PHP教程
到底啥是Zend Framework MVC设计模式?
MVC (Model-View-Controller)模式,即模型-试图-控制器模式,其核心思想是将整个程序代码分成相对独立而又能协同工作的3个组成部分,具体的功能如下:
通俗的讲:
再通俗的讲:
这个MVC设计模式,有点像现实中我们去饭店吃饭的过程。当你到一个饭店吃饭,过程是这样的,首先你得点菜啊,不用喊,一个光溜水滑,埋了八汰的小服务员就会整个小本来你面前,"先生,你来点啥?",你看看菜谱,"给我整个小盘鱼香肉丝,再加一碗米饭。""好的,先生稍等。"说着服务员一溜小跑朝后厨方向,"那啥。。。告诉厨师别放姜啊!~~"。。。带会儿,服务员就把你要的饭菜给你端上来了,"先生请慢用~~有啥需要帮忙的,尽管喊我。"你吃的狼吞虎咽的,根本不知道里面放的青椒妈的都没洗~~~
就这么一个简单的你要饭的过程就可以用MVC将其描述一下,你呢就相当于View,服务员呢就相当于Controller,而那个不洗青椒的该死厨师就是Model。你一开始跟服务员点菜,就相当于我们的浏览器向服务器发出请求,服务员将你要吃的菜交给后厨的师傅,就相当于控制层将浏览器发过来的请求交给业务逻辑层来处理,而它根本不管厨师到底咋做这个菜,反正你能给我鼓捣出一盘鱼香肉丝就成,青椒洗不洗那是他的事,这也就是我们常从老鸟口中听到的"封装",封装好啊,封的你连青椒没洗的鱼香肉丝都能吃的喷香,嘻嘻~~当服务员把一盘冒着热气的鱼香肉丝端到你面前的过程,就相当于业务逻辑层处理完后把相应传回给浏览器,然后通过浏览器显示给用户。这样就实现了一个简单的MVC协调交互,也不知道你明白点没有。。。
就拿一个简单的登陆模块说,需求是你输入一个用户名、密码,如果输入的跟预先定义好的一样,那么就进入到正确页面,如果不一样,就提示个错误信息"你Y别在这儿蒙我,输入的不对!"。
这个小小的模块中,起始的输入用户名密码的页面跟经过校验后显示的页面就相当于View,而这里还需要一个Controller页面,就是用于接收输入进来的用户名密码,还有经过校验后返回的一个Flg(此Flg就是用于判断你输入的是否正确,而跳转到相应的页面的),最后还缺一个Model,那么就是你那个用于校验的类了,他就是处理你输入的是否跟预先订好的一样不一样的,之后返回一个Flg。这样就完全实现了逻辑跟页面的分离,我页面不管你咋整,反正我就一个显示,而Controller呢也不管你Model咋判断对不对,反正我给你了用户名跟密码,你就得给我整回来一个Flg来,就跟服务员根本不管厨师青椒洗不洗一样,而Medol呢,则是反正你敢给我个用户名跟密码,我就给你整过去个Flg~~如果看到这你有点茅塞顿开了,待会就试验着写写吧!!
现在在开发WEB应用的时候,比较流行的一种做法就是使用"MVC"结构,使用如此方式去开发WEB应用程序,逻辑性强、简浩明了,使程序设计起来更加方便,快捷。何为"MVC"呢?简单的来说,它就是"模型(Model)"、"视图(View)"及"控制器(Controller)"的结合体,也就是所有的"三层"抽象结构,当然这里所说的"MVC"是针对WEB上应用而言的,"使代码和页面设计分开"便是其主导思想,这一思想在使用JavaServlet/JavaServerPages技术的"Struts"中表现的淋漓尽致,有兴趣的可以去Http://Jakarta.Apache.Org/Struts看看,这种设计模式使的程序设计人员可以专注于代码的设计、编写及调试,网页设计人员可以有更多的时间去投入设计而不用理会具体的功能实现,这种分工方式完全适应大型项目或企业级的分布式应用开发。
从PHP5的推出可以看到,其中的面向对象功能越来越完善,使用PHP来开发大型的商业网站或者分布式企业应用已经成为可能,如果再结合Zend Optimizer,已经实现了代码的封装性。
如何在PHP中使用"MVC" 设计模式去开发WEB应用呢?记住一点(代码和页面设计分开),用一个简单的例子演示一下,比如要从数据库中查询出会员的资料以显示在网页上,这里就需要考虑到两点:1.连接数据库并取出会员资料,2.把会员资料显示在网页上,连接数据库我们使用一个数据库的类,把它叫做"DB"类吧,这个类此时就扮演了 "模型(Model)"的角色,接着我们需要编写一个操作"DB"类的程序以取出数据,这个程序所扮演的角色就是"控制器(Controller)",它接受客户端"POST"或"PUT"的数据,然后再调用"DB"类以取出数据,把这些数据都存放在"控制器(Controller)"中,最后把数据传递给"视图(View)"并按照一定的排版格式显示出来,从上面的分析可以看出,模板在这里就是扮演了"视图(View)"的角色,当然仅仅一个模板类是不能说成是MVC的,真正的MVC不是这么简单的,具体可以参考一下"JSF"。