设为首页 收藏本站
查看: 728|回复: 0

[经验分享] 轻松理解PHP JAVA MVC 设计模式

[复制链接]

尚未签到

发表于 2017-4-3 07:17:04 | 显示全部楼层 |阅读模式
有人问我,什么是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 和 Controller 里尽肯的不要用echo直接数据到浏览器端。用return 返回数据的好处是:返回的数据可以于HTML,PDF,XML不同界面展示。

这里给PHP程序员个建议,不管你是否框架,每次想使用echo显示数据时,想一想,数据能否先放到数组里稍后再用?可以的话,就先放到数组里。除非没有其他办法,否则不要用echo,这样你的view层就能和其他程序分得很清楚。

喝口茶,讲点题外话,很多程序员认为,程序员不过是IT民工,辛苦又不挣钱,不能一辈子些程序,先干段时间的开发工作,等到30岁后,向项目经理发展。这就是从Model 层向Controller 层发展。而有的项目经理又想,成天这个项目,那个项目,都是给人打工,看看大学的一个做销售老同学,什么产品也不开发,就把别人的产品拿过来包装一下,轻松挣钱。项目经理想着向销售发展,这就像是从Controller 层向View层发展。
这是一个不是很严谨但有趣的比喻。

前面提到老PHPer不喜欢用框架,喜欢用VI 裸写。这里并非提倡或发对是否用框架。
就像前面餐馆的比喻,有些一个老板的小店能长期经营,而分工明确的大店也可能经验不善。

物以致用,没有最好的,只有最合适的。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-359333-1-1.html 上篇帖子: php > 关于php时区时间错误问题 date 当前时间 时差(转载) 下篇帖子: PHP共享内存的应用shmop系列
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表