谈谈php中的mvc
围绕着的一直是MVC。为什么每个人都说着MVC,都把MVC神化到如此强大的地步,真的是不明白,MVC到底有什么好处的。
在群里跟别人争论MVC,没一个人赞同我的观点。我的观点是MVC臃肿、不灵活。然后这个群中其他人别人的观点是MVC很灵活、很好用。但是他们说MVC并不是单单指cakephp、thinkphp、zf。还有的说discuz 、dedecms、wordpress也用到了mvc。
一直到现在为止,还是没有用mvc来弄php,每次尝试都是感觉又繁杂又乱。一直想不到mvc有什么好处,我自己的代码可以执行完所需功能,不需额外的多余的代码,如果用了mvc,根本不清楚那一大堆文件夹里面的代码如何执行的。另外,mvc维护不方便。动不动报错,不执行,要执行一段代码平均引入三四十个php文件。。基本上忽略了硬件性能。而你又不能去改他的底层
这个话题真的很够讲的,其实不光是php社区,就是java啦.net啦这些社区里,也是就这些
OO还是不OO,框架还是不框架,模式还是不模式....等等经常讨论来讨论去.....
随便说几句吧,
其实我们每个人写软件的时候都在追求使用某种模式或框架的, 程序写到一个规模(不需要很大),你自然而然地会为了优化而整理其结构,比如说重复的代码会写成函数, 很多web程序都把同样的请求预处理放进common.php里.... 等等, 随着软件规模进一步增大,这样的优化也就越多, 也就更需要从整体上来把握你的软件.
而这种对软件的整体把握,往往取决于你对这个软件的看法(抽象), 这种从整体上的抽象,其实也是一种为复用而作的对软件整体的优化,(重复代码写成函数这种是从细节做上的优化)
从这点上来说,几乎每个人都在用框架,不用别人的,就会用自己的,不用MVC,也会用ABC,CBD(瞎说的)
而为什么现在MVC这么流行,没啥特别的,第一个,MVC还是挺好的,第二个,别的现在没它这么流行....
以后呢,很难说....关键在web本身在变化,IT在变化,再过若干年,编程的思路和方法也许会完全不同.
那么用不用MVC当然也在各人,如果你觉得你的框架更好,当然可以用.
一个好软件的成功因素很多,不要说不MVC,就是不OO,就是不高级语言,只要你够牛,理论上用汇编一样可以写出好软件来.(实际上所有软件最终都是编译/解释成了机器语言,所以理论上一定能).
ok,上面说的是理论上.....待会我说实际上.....
实际上....
使用MVC及相关成熟框架还是有很多好处的,
经常听人说自己写的code不比用这些成熟MVC框架差,但是如果拿出来真的开源的话,是否会比zend这些更有竞争力呢?
至少有一点,这些框架开源已经有一定时间,广泛使用,存在的bug较易被发现和改正....就这点,很多闭源软件是比不上的(更不要说个人的东西了),还有,比如zend的开发方式也是开放的,大部分模板都是在社区讨论后才开始开发,不断根据社区的反馈修改,因此也更能适应大部分人的需要.
对企业来说,使用成熟框架,除了减少开发时间外,还可以减少培训和新人适应时间,可以容易得到社区支持(比如问题容易google到答案).好处是显然的,所以你看到那么多招聘需要MVC就很合理.
对我来说,我也倾向于用成熟框架,尤其在新项目或已有项目没有建立在稳定框架基础上的.一个是我想节省时间,而且我也绝对写不出zend那样水平的代码.
这里说的都是大多数情形,对特定企业的特定项目,需要考虑的因素很多. 用或不用都没有什么对和不对.
================================================================================
再谈点具体的,
对你的观点"MVC臃肿、不灵活", 这个我也反对 :)
MVC本身只是一个概念,谈不上臃肿,不灵活, 其实你说的是这些个框架(具体的实现), 也就是说是cakephp不好,或者zend不够好,不是MVC的问题 (个人认为,zend就比cakephp简洁,灵活)
不过你那zend/cakephp它们和你自己的比,稍有不公,因为它们是设计给整个社区的通用框架,而你的必然是针对你已有项目,针对范围大大不同. 对他们来说,必然不是每个模块都对每个项目必须的,但是只有提供了这些丰富模板,他们才能适应不同项目(这才谈得上灵活吧), 而且,比如zend,各个(大部分)模板相对独立,没用到的模板,不会参与运行,也不会有严重影响效率的问题.
( 如果较真地说,框架当然会影响一点效率,和最直接的php代码比起来的话, 因为必然多点处理啊...不过这种比较有点像拿高级语言和汇编比, 高级语言当然慢,但是......这个关系到到底怎么判断软件质量的问题,有空再聊 )
对他们(是谁啊)说discuz!等也算MVC的这话... dedecms我从没看过,不知道,不过discuz怎么也没看出MVC来......这个也说明了好(这里指卖得好的:))软件不是一定要MVC,这个我支持你
再说你的问题:"有哪个开源程序用到了所谓的主流开源框架"
这个目前的确不多...原因大概我能想到的:
目前这些有名的开源项目很多已经存在很多年,而起步时MVC的框架还没成熟....
比如discuz和wordpress都是2002年前后就有了,而zend framework是2005年才开始,
这中成熟的开源项目都是经过一定时间才能成熟的, 所以目前不多也很正常,将来一定会多起来.
还有,作为一个专门的开源项目来说,相对需求比较固定,用自己的框架也很正常.
zend有很多企业内部在使用,大部分不开源,或还没有开源..
可以这么看
框架是一种约定
MVC是一种理念和架构.框架实现了MVC,但框架不一定是有效率的.
MVC一种.逻辑分层的根念.C控制层,实际是对请求进行验证和分流,V展现和用户接品层,M是模型层,但M更多认为是一种业务模型(事实现在许多框架是一种数据库模型)
即请求逻辑,业务逻辑和显示逻辑分开,做到相对独立,并提高代码重用率
MVC可以简实现,也以复杂实现
比如:CI框架,核心就是一个加载类.实际上,这对于MVC已足够, 但如果同时要实例化多个数据库类,性能就会变慢.模型类的实现是复杂的.
公共框架为了能实现更多功能,适合更多人和情况开发,效率低下是事实.总体来说,适合中小企业开发,不适合高效率能网站开发.