24

08-2012

无论是我们在学习php编程的过程中,还是我们已经参加工作后,我们这些码农们津津乐道的就是mvc。但是到底什么才是mvc,mvc的编程到底又有什么好处和坏处,下面,就我一个php新手谈一下我对于mvc的理解。

说到mvc其实就不得不说面向对象,其实php原本并不是面向对象的语言,只是后来引入了java的面向对象。包括现在她也并不是纯的面向对象的语言,php可以面向对象编程,也可以面向过程编程。咋一听这些概念和名词有的人可能觉得好深奥,好难懂。其实大可不必。我们学习东西的时候,有的时候要做到不求甚解,当然这里这个词是作为褒义词来用的。第一,其实这些就是一些似是而非的概念罢了,你如果问为什么叫面向对象为什么叫mvc就好像在问人为什么叫人,狗为什么叫狗一样,让人无法回答,这就是给他的一个名字,只不过这个名字你之前没有见过,不用理解的那么复杂,这是这些所谓的程序员要显得高级一些,所以找了这么个词,所以并没有什么实际的意义。第二就是作为编程人员来说,一切的学习都是为了解决问题来的,不以解决问题的学习都是耍流氓。所以我们编程只求实现只求优化,如果你每件事情都要刨根问底,那你什么也做不了了。比如你会了图片上传,你又要问他怎么实现的,你知道了用了哪些函数,你又问这些函数又怎么定义的,会了,你又问他为什么这么定义,到最后你可能要追溯到计算机的发展史,追溯到电子微粒,但即使这样,也不可能解答你的疑惑,因为有很多东西是找不到原因的,就比方说你为什么不问为什么php中echo就能输出东西,你觉得这就是常识,但是你也不知道这个函数怎么定义和实现的。所以适可而止,为了解决问题而学习。

好了说了一些没用的,下面就说说mvc。我们其实很多时候,尤其是在早期都并没有使用mvc的模式来编程。m是model,是模型。这里是程序执行的具体操作,也可以说是一个步骤,一个小功能的操作。有很多很多的model模型,他们相对独立,可以自己完成自己的功能,我们现在很多人把他简单的认为是对数据库的操作其实是不合适的。v是view是视图。其实就是实现。就是直接展示给我们的地方,也可以简单的理解为html、htm、dwt等页面。他就是将程序执行的结果进行显示。这个好理解,而c就是控制器。他其实并没有什么具体的功能,他是负责支配model模型和view视图,调用哪些模型和哪些视图,如何的顺序如何的组合从而进行整个流程的控制和展示。这就是控制器。这就是他们分别的概念,这样他们分工合作而又互不影响。这就是简单的mvc。这样的好处是什么呢?就是彼此间不用考虑彼此是如何实现的,相互之间很低的耦合性,你需要什么,我提供给你,我只要结果,我不管你是怎么做的。所以这样有很好的移植性,比方说你写了一个model,同样可以在别人那里来用,当然前提是你们用同个程序。这也就类似于类的概念,你写一个类,别人都可以用。只需要遵循你的规则就可以了。这样来说也就有很大的好处,就是缩短了很大的时间。用的时候直接拿过来用就可以了。这其实就可以说是面向对象的编程。所谓的对象可以理解为目标,我们都是向着这个目标在做,不用管中间彼此之间如何的做的。而我们在写代码的时候又必须以面向过程的思路来写,为什么呢?因为这里就说到了mvc或者面向对象的缺点。面向对象整体上来说是提高了效率,但是具体的看某个功能的时候,他又降低了效率,为什么呢?因为如果我们不这么面向对象的编程,就是为了做这个功能,不用考虑扩展性等等,仅考虑效率,我们不会事先定义类或者方法,要用的时候直接俺着功能写就可以了,这样写的话这个功能其实是高效的。但是如果项目做大了,别的地方又要用到这个方法,那么我们又要写一遍,要扩展功能,我们又要将之前写过的地方都要改,这样来说又降低了效率。这个效率不是执行的效率,而是整体的项目效率。其实面向对象和mvc是降低执行效率而提高整体效率的一个编程方式,所以具体写代码的时候还是要面向过程的来尽量提高效率。这就好比什么呢。就好比我们的window和linux两个系统。普遍认为linux的效率要比window的高,为什么,因为他不用将命令再转化为图形的让人容易识别的方式,省略了大量的操作,都是通过代码指令执行,这样肯定会效率高,但是反过来想,window让所有人都能轻松的学会使用电脑,省去了大量的学习等的时间,所以他的用户才那么多。这样来说反而又提高了效率。所以说效率其实都是相对的。

我们刚刚进入编程领域的时候,会追求执行效率的高效,但是当我们做的东西越来越多,我们就会发现,我们经常用到的一些东西,我们为什么不用一个类封装一下呢,这样我们再用的时候调用一下就可以了。并且改的时候只改这个类就全部都改了。所以,面向对象和mvc的编程其实又是一个高效的编程方式。但是萝卜青菜各有所爱,你说这个好,人家偏要说那个好。所以其实争论到底哪个好并没有什么意义,只要是你喜欢的方式,能够解决问题的方式都是好的方式。并不存在孰重孰轻。我的目的就是大家分享学习一下。因为方法不是通用和一层不变的,我们要因材施教,没有最好的方法,只有适合的方法!

程序本天成,妙手偶得之!我们只是代码的搬运工!

转载请注明:http://www.521php.com/archives/347/

目前有1 条留言

  1. 2012年08月27日 下午 4:00 闪酷互联   |  引用  |  #1     

    受教

发表评论

昵称:

网址:

eg.博客主题调用的是Gravatar头像,你可以通过邮箱注册获得头像.
/ 快捷键:Ctrl+Enter