假日咖啡的博客

HolidayCoffee's Blog

技术观察:从codeigniter的学习中对整个开发潮流的观察

 

因为一时兴起想写个简单的PHP工具,想试试在现成的框架上写这个工具,所以对现有的PHP框架展开筛选调查,发现很多有趣的信息!

起初我知道MVC、OOP、原型这些东西都是什么,但很难将它们联系在一起,经过这次的调查我算是彻底摸清了这些东西之间的联系。

 

MVC其实是一种概念,与具体的实现方法无关,举个例子,“上班”是一种活动,开车上班是一种概念,这个概念的核心是“开车”。MVC的核心是分离出模型、视图、控制器,核心在于“分离、分工”。这是概念层,但到了具体该如何执行问题,就到了方法层了,经过某些人的讨论和实践,专家们认为用OOP(面向对象编程)这种方法,可以将MVC这种概念预言的开发效率发挥到最理想的程度(也就是说,开4个轮子的汽车可以将上班的效率发挥到极致)。概念有了,方法有了,就差实例了。彻底用OOP完全新写一个实例,那将是一场浩大的工程,于是人们发明的框架(基于OOP的)这种东西,将在写实例的过程以往、以及预计的、经常用到的东西都集成在一起,只需要按一定逻辑重新组装起来就OK了(厂家已经为开发者造好汽车的底盘、发动机、油箱这些配件,开发者只需要按需求调整、组装就行,有些厂家甚至附带一个完全组装好的简单汽车,交给开发者作为参考)。

 

从CI(codeigniter)的教程中跳出来,继续看其他框架的教程,我发现了一些惊讶到我的信息。这些框架已经将MVC这种概念发挥到了极致,有专门的地方写访问路径逻辑、模型交互代码的地方(控制器Controller),有专门写特殊算法和数据库交互方法集的地方(模型 model),有专门将控制器输出数据进行HTML化包装的地方(视图 view,我喜欢称之为模板,就像印刷机上那块印版一样)。这里蕴含着惊人的信息量。

 

首先,我可以确定的一个事实是,CMS(内容管理系统),是最早的网络应用(之一),如今还有很多人根本分不清CMS和网站两者的关系。网站其实就是一个网络节点,是一个提供公开信息的场所,而CMS是管理和发布这些公开信息(其实是管理整个场所)的工具,这种工具在最早有离线版(本地客户端,信息的处理在本地进行,通过向服务器发布页面,更新站点信息)和在线版(网络应用,完全在远程服务器上处理,并发布页面),但随着时间发展,在线版成为了主流(因为不用下载客户端可以直接在浏览器中处理、管理信息,很便捷),顺便说一句,很不喜欢现在的人用“应用”这个词,在过去我更喜欢用“软件”这个词。

 

回到“框架”,我发现一个惊人的事实,使用框架写出来的应用其实只有一个入口文件,就是位于顶层的那个index.php,所有的POST/GET信息都是通过这个文件传入到整个“后面”的处理程序。我先解释一下,举个例子,在过去我们输入www.abc.com/good/index.html这个URL路径时,在服务器端确实有一个good文件夹,在这个文件夹下确实有一个index.html文件。但现在整个站点是用框架做出来的话,他的完整路径应该是这样的www.abc.com/index.php/good/index.html 其实后面的路径是在给index.php传了一个“/good/index.html”的值,这个路径在服务器端不是真实存在的(意味着按这个路径找不到那个文件),他是虚拟出来的,开发者只需要在服务器环境设置当中修改一些设定就可以将index.php这个字符隐藏掉,之后会变成www.abc.com/good/index.html这URL路径做的更真的一样!这是在CI框架中发现的,我在其他框架中也发现了类似的设计。

 

框架,更彻底的分工。基于MVC这种概念的框架中,有人专门负责“控制器”这块,其实就是业务逻辑、访客或用户的访问流程设计,有人专门做界面也就是视图这块,如何将数据和表单更好的呈现在访客或用户面前。而最重要的且最吸引人的东西,就是那些奇特的“模型”,在这里面(模型)工作的人往往是达到一定境界的开发者,因为“模型”是整个应用的核心。

 

现在发散一下思维,那些开发者们发布的文章中的只言片语,就可以串联在一起的了,一切变的可以理解、清晰了(至少不用看那冗长的THINKPHP的视频教程了,我已经明白他们的意图了,接下来只要有文档,和一个完整的实例就能搞清楚,网络应用是怎么“快速”开发出来了)。

 

2015/10/25 补充:

把URL中的php后缀隐藏掉的技术,是用到了俗称“伪静态”(rewrite,‘重写’的意思)的技术。