zoukankan      html  css  js  c++  java
  • 谈谈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已足够, 但如果同时要实例化多个数据库类,性能就会变慢.模型类的实现是复杂的.

    公共框架为了能实现更多功能,适合更多人和情况开发,效率低下是事实.总体来说,适合中小企业开发,不适合高效率能网站开发.

    PHP 交流群:120372298    大家一起学习

  • 相关阅读:
    防删没什么意思啊,直接写废你~
    绝大多数情况下,没有解决不了的问题,只有因为平时缺少练习而惧怕问题的复杂度,畏惧的心理让我们选择避让,采取并不那么好的方案去解决问题
    Java 模拟面试题
    Crossthread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on
    一步步从数据库备份恢复SharePoint Portal Server 2003
    【转】理解 JavaScript 闭包
    Just For Fun
    The database schema is too old to perform this operation in this SharePoint cluster. Please upgrade the database and...
    Hello World!
    使用filter筛选刚体碰撞
  • 原文地址:https://www.cnblogs.com/guhao/p/2945363.html
Copyright © 2011-2022 走看看