近期观察研究了几十个php框架,在此总结下一些框架的常见问题,总结下怎样的框架容易受欢迎。
php框架之问题一: 为了实现框架而框架。
著名的诗人白居易说“文章合为时而著 歌诗合为事而作”, 对于程序而言,也要走到为解决问题为出发点;对框架而言,应走到为帮助程序解决问题为出发点,则自然步步为营,从理论到实践都合情合理,获得各个角落的用户支持。 但是很多框架不是这样的,它们从代码到作者自述都洋溢着一种对实现某些模式如MVC的喜悦,它们会说,看老子多牛逼(当然语言没有这么明显),用不到若干k代码就实现了MVC实现了模板系统实现了路由! 但是,作者们,你的框架目的是实现了这个模式,对用户来说,他们千方百计寻找或者偶然邂逅您这个框架,为的也是为了实现这些模式吗?
php****框架之问题二: 能做到,但没让人明白怎样做。
也有很多框架,它们出于作者们多年实战,从刀耕火种茹毛饮血发展到面向对象第二次机器人世界大战,战无不胜攻无不克。但是,仅限于在作者手中。换到用户面前,就好像把钢铁侠N代丢给了一个收破烂的,因为没有足够的说明, 没有文档没有注释没有范例没有作者联系方式。怎么办,用户不知道,他们中很多人会因为看不懂这框架用不起来,或者部分看懂,把它拆解掉,变成回收利用的金属,加到自己的里面。嗯嗯这里面这个lib还是不错的,其他的,其他的太复杂了。
在这里暂停一下,有许多框架因为此二罪并罚,死掉了,不是吗? 那些你再找不到主页的框架,那些作者自己也懒得更新的框架。
php框架之问题****三: 复杂规则
此类框架的特点在于,作者们除了实现某些模式外,也意识到必须让用户们明白如何用此框架斩妖除魔。但是,此框架虽然借鉴了很多其他框架思想的,万万不能让皇上们看出这其实是以前死掉的那个大明湖畔的夏雨荷的后代,必须换一种方式做同样的事情!比如,我们可以用数组做为各种配置的灵魂! php的数组实在太好用了, 我们只需要告诉用户,定义一个数组,里面写上某些东西,程序就会帮用户自动的做很多事情了。但是写什么东西好呢,让我们用一些语义化的英文单词吧。然后,再实现一套解释这些单词意义的程序…… ok,一大堆的词汇与调用规则,匹配着框架的各种概念,用户抓狂了?
php框架之问题****四: 独门绝技
本框架有很多的lib,你只要按本框架规则(征服第三条,征服第二条),并且使用本框架load进来就可以用了! 不过,这个lib是必须继承本框架里某个类的,然后配合core使用。还有,有些文件你必须放到某些路径下……
php框架之问题****五: 和Java一样!
也许你是一个非IT专业出身,半路出家为了养家糊口学php的草根,内心中一直若隐若现对牛逼语言和“企业级”开发的敬畏?从现在开始,本框架可以让你和牛逼的J2EE一样遵循23种设计模式引入各种容器,对象,xml,让你从此人生充满阳光充满自信。 比如,以后做个页面上面显示helloworld就不要写echo ‘helloworld’这种不入流的菜逼代码了,你要用我们这种参考了Java企业级框架的框架,先写一个XML,里面配置配置,这叫注入!然后,写一个entity,一个dao,一个控制器,一个model,一个view……最后在某处你写一个对象,里面不要用echo,而是调用某个其他对象来输出,这样就不会耦合得太厉害了,从而实现要修改helloworld为hellokity,就不必改你核心代码,只要去跟踪下这n个文件,找到定义hello的那个接口,找到实现hello的那个类,照样搞 个kity实现此接口……最后和你一起写代码的同事找不到world在哪里的时候,你就告诉他去读懂框架,源代码都在哪里还看不懂先学一下基本的架构思想!顺便上网发个帖鄙视一下现在的php的IT培训质量很差。
但是怎样是比较好的php框架呢?
一,为解决问题而生
为了加速开发,为了帮助开发者少写枯燥代码而生。提供一定数量的开发辅助函数工具(lib,helper……),比如zend,yii,CI,kohana等
二,对框架的解释充分,坚持,彻底,与时俱进
有框架的主站,充分的细致到每个调用函数的文档(包括注释,API手册等),
有维基,论坛,至少能让用户有地方提问题建议,主开发者与用户交互活跃。
例如:CI最突出的地方是其网站文档。
三,独到深厚的设计思想
独到而不独门,能够保持生命力,不是依靠别人不能借鉴的紧密耦合的逻辑,而是拥有一套站得住脚的设计思想,让人感到处处合理,与其费尽心机扒其精华重复造轮子不如直接皈依。让人感到与其使用java做某些事不如用它做。
四,与主流工具兼容
支持mysql,jquery等是起码的,如果你发现了一套仅封装oracle的orm框架还很火请告诉我。
五,分清主次,突出主要特点
框架的主要优点是什么必须明确。用户苦苦寻找并且花费时间下载阅读的绝不是一个帮他们用另外一套语法在html的head里载入js和css的玩意。
也许某些框架不是一个lib大全,但是只要突出自己特点,还是会有一些需要者支持。
六,强调用户的自由
不强迫用户遵循某些模式。在多数情况下,用户最需要的是不择手段快速解决需求的方法,而不是实现了xxx模式或者某种“思想”。强制要求用户采用某些逻辑进行开发会导致其内心反感,并且,毕竟不存在万能的普遍适应各种场景的最好的模式,让用户能够在控制器里写输出是很重要的优点,尽管这不入流。
最后,感谢所有开源框架的开发与贡献者,本文尽管对一些现象有所揶揄,但无碍我对各种自由思想开源的尊重。