`
youtianlee
  • 浏览: 5384 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

轻松理解PHP JAVA MVC 设计模式

阅读更多
有人问我,什么是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 裸写。这里并非提倡或发对是否用框架。
就像前面餐馆的比喻,有些一个老板的小店能长期经营,而分工明确的大店也可能经验不善。

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



分享到:
评论
5 楼 whyx0_0 2011-06-10  
有助理解, 非常好
4 楼 lizhensan 2011-06-09  
讲的很通俗,有意思。
3 楼 hardPass 2011-01-19  
比喻不恰当。

我的理解:MVC实际应该是CMV

2 楼 niva 2011-01-18  
哦,我有个疑问,就按你的比喻,如果是一个小软件公司,或许分为程序员、项目经理、销售员就行了,可是如果是大公司,光是技术部门就分为更多的角色,部门经理,架构师,项目经理,技术经理,高级程序员,初级程序员……比如高级程序员,不光要自己写程序,还要负责帮助培训初级程序员,项目经理不光要管理程序员,还要和其他部门打交道,同理,一个小程序或许可以分得出MVC,那如果程序规模一大,谁是M,谁是V,谁是C呢,还能分得清吗?
1 楼 haidii 2011-01-18  
引用
物以致用,没有最好的,只有最合适的。

说得好!

相关推荐

    mvc设计模式 详解

    mvc设计模式对于web应用的开发无疑是一种非常先进的设计思想,无论你选择哪种语言,无论应用多复杂,它都能为你理解分析应用模型时提供最基本的分析方法,为你构造产品提供清晰的设计框架,为你的软件工程提供规范的...

    基于 MVC 模式的博客(BLOG)系统的设计与实现

    MVC设计模式是一种常见的软件架构模式,主要用于简化复杂系统的开发和维护工作。该模式由三部分组成: 1. **模型(Model)**:负责存储和管理应用程序的数据和业务逻辑。模型层通常与数据库交互,处理数据查询、...

    基于MVC设计模式shop完整项目代码

    综上所述,基于MVC设计模式的Shop完整项目代码展示了如何将电商应用的各个组件解耦,使代码更易于理解和维护。开发者可以通过理解每个部分的职责,结合配置文件和具体业务需求,对项目进行定制和扩展。

    新生报到管理系统java编写MVC模式jsp页面

    【标题】"新生报到管理系统java编写MVC模式jsp页面" 涉及的主要知识点是基于Java技术栈的Web开发,特别是MVC设计模式和JSP(JavaServer Pages)的应用。MVC,即模型-视图-控制器模式,是一种常用于创建用户界面的...

    关于设计模式MVC(Model View Controller)模型-视图-控制器

    总结,MVC模式通过分离关注点,提高了软件的可维护性和可扩展性,是现代软件开发中一个非常重要的设计模式,尤其是在Java和Web开发领域。它鼓励代码复用,降低了组件间的耦合,为构建复杂应用提供了强大的支持。

    学生信息管理系统、MVC设计模式,实现学生信息管理(增删改查)使用MYSQL、C3P0、DBUtils

    **MVC设计模式详解:** 1. **模型(Model)**:模型层是系统的数据处理中心,负责业务逻辑和数据的存储与管理。在本项目中,模型层可能包括学生信息的Java对象(如Student类)以及用于与数据库交互的DAO(Data ...

    mvc设计模式

    **MVC设计模式详解** **一、MVC模式概述** MVC(Model-View-Controller)设计模式是一种软件设计架构,常用于构建可维护性和可扩展性高的Web应用程序。该模式将应用程序分为三个核心组件:模型(Model)、视图...

    java mvc入门思想

    它最早由IBM在70年代的Sanfronsisco项目中提出,后来随着J2EE的发展,MVC模式成为了Java开发者首选的设计模式之一,也被广泛应用到PHP和ColdFusion等其他开发语言中。 **MVC模式的组成部分:** 1. **模型(Model)...

    jsp MVC设计模式应用之游戏卡在线销售系统(论文).zip

    "jsp MVC设计模式应用之游戏卡在线销售系统(论文)" 提示我们这篇论文主要探讨了如何在游戏卡在线销售系统中运用MVC(Model-View-Controller)设计模式,这是一种广泛应用于Web开发中的架构模式,尤其在Java平台上如...

    浅谈模型-视图-控制器(MVC)模式

    综上所述,MVC模式是一种强大的设计模式,它不仅可以提高软件的可维护性和可扩展性,还能帮助开发者更好地组织和管理代码。虽然MVC模式并不适用于所有情况,但在大多数企业级应用和复杂的Web项目中,它仍然是一个...

    经典mvc模式开发好

    MVC(Model-View-Controller)模式是一种软件设计模式,广泛应用于Web应用开发中,它将应用程序分为三个核心部分:模型(Model)、视图(View)和控制器(Controller)。这种模式的主要目标是实现业务逻辑、用户界面...

    个人空间管理系统,本系统采用纯MVC设计模式开发,结合php+Mysql技术.zip

    个人空间管理系统,本系统采用纯MVC设计模式开发,结合php+Mysql技术,此系统对php的基本语法、sql原生语句,自定义封装的常用的工具类文件等有着较好的掌握;后台功能主要包括: 分类管理、文章管理、评论管理、...

    j2eeMVCMVC模式

    MVC(Model-View-Controller)模式是一种广泛应用于软件工程的设计模式,尤其在Web应用开发中被广泛应用。这种模式的主要目的是将应用程序的不同关注点进行分离,提高代码的可维护性和可扩展性。 #### 二、MVC模式...

    MVC模式应用Demo

    在本"MVC模式应用Demo"中,我们可以深入学习如何在实际项目中运用MVC模式,理解各组件间的交互方式,从而更好地掌握这一重要的软件设计模式。通过实践这个Demo,不仅可以提升对MVC模式的理解,还能积累实际开发经验...

    mvc架构的Java学生管理系统

    MVC(Model-View-Controller)架构是一种设计模式,广泛应用于Web应用程序开发,特别是Java领域。在MVC模式中,系统被分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。 1. **模型(Model)*...

    基于MVC模式的投票系统

    【基于MVC模式的投票系统】是一个典型的Web应用程序设计,它采用了Model-View-Controller(模型-视图-控制器)架构模式。这种模式在IT行业中广泛应用于开发动态、交互式的Web应用,因为它能够清晰地分离业务逻辑、...

    MVC设计模式

    ### MVC设计模式详解 #### 一、MVC设计模式简介 MVC(Model-View-Controller,模型-视图-控制器)是一种广泛应用于软件工程,尤其是Web应用开发中的设计模式。这种模式最早由Xerox PARC(帕洛阿尔托研究中心)在20...

    mvc模式

    MVC(Model-View-Controller)模式是一种软件设计模式,广泛应用于构建Web应用程序,尤其是在Java、.NET、PHP等后端开发领域。它将应用程序的业务逻辑、用户界面和数据访问分离开来,提高了代码的可维护性和可扩展性...

Global site tag (gtag.js) - Google Analytics