大头痛:CodeIgniter或定制框架,你有什么想法?

tou*_*ano 10 php codeigniter

如果您想开发一个WebApp,您知道它将随着时间的推移而扩展并变得越来越大,您会使用CodeIgniter还是您定制的框架?

您使用开源框架的理由是什么?您反对它的论点是什么?

以下是我的想法: CodeIgniter Pros

  • 出色的文档 - >更容易在团队中工作.
  • 所有的开发时间都投入到业务逻辑中.
  • 没有重新发明轮子

CodeIgniter缺点

  • 如果我想要成长,不确定它的可扩展性
  • 麻省理工学院许可证 - 不确定它的含义,但如果我想按照许可证销售我的应用程序,我不确定我是否能够这样做.

自定义编码的Framkework Pros

  • 可扩展性.我可以决定它将如何发展.
  • 我拥有代码
  • 灵活的设计.

自定义编码框架缺点

  • 需要记录它,以便其他人能够进行协作.
  • 需要投入时间来维护框架
  • 意外的错误/错误

你对此有何看法?我的大脑告诉我要使用CodeIgniter,我的心告诉我要构建自己的框架.

AD7*_*six 17

使用已存在的东西.

为何选择CI

为什么要将你的选择限制在一个框架内 - 这使得选择成为一个近乎吸引人的论点, 你的心并没有告诉你要编写自己的框架 - 你的自我确实如此.如果你在开始之前消除了大量其他框架 - 你已经开始了很多工作.

CI是一个相当糟糕的单选.

在撰写本文时,Php是5.4.0 - 如果您能够选择用于新项目的框架 - 认真考虑使用使用5.3+功能的框架 - 或者已经在使用这样做.不要选择具有充满php4样式代码的遗留代码库的框架.

CI Cons

如果我想要成长,不确定它的可扩展性

最有可能(我不使用或喜欢代码点火器)比随机自定义框架更具可扩展性.

MIT许可证

对如何使用MIT许可软件几乎没有限制.将MIT读作"不删除或修改框架文件中的许可证块"即可.

自定义编码框架优点

可扩展性.我可以决定它将如何发展.

你确定你知道什么是可扩展的意思:)

我拥有代码

几乎在所有情况下都是如此 - 如果您使用MIT许可框架,则确实如此.

设计灵活

从长远来看,这不太可能是一个好处.例如,您取得了爆炸性的成功,需要引进一个开发团队.您将必须训练每个人如何使用构建应用程序的自定义框架.这不是简单地将它们指向一些教程来克服使用<insert name of selected framework here>的初始学习曲线.

自定义编码框架缺点

需要记录它,以便其他人能够进行协作.

实际上,除非你构建一个能够与现有框架竞争的框架,这种框架不会发生(即使有良好的文档).

需要投入时间来维护框架

不要低估这需要多长时间.

意外的错误/错误

你会在这里度过很多时间.

综上所述

  1. 一个PHP框架是很多工作,需要维护很多.而且很多 - 我的意思很多.
  2. 花在框架级代码上的时间是您不会花在自己的应用程序功能上的时间.
  3. 使用php框架意味着您可以从(希望)更有经验的开发人员的经验中受益.如果没有高成本的学习困难,为什么x不起作用,或者为什么让你的应用程序对某些安全问题敞开大门.
  4. 每当某些东西不能正常工作时,您就不会确定它是否在您的应用程序代码或您的框架代码中(无论如何都是如此,但您需要有信心知道框架"正常"并且您的您的应用代码中存在问题)
  5. 每次你眨眼都有一个新的PHP框架,他们都以某种方式吮吸 - 你想成为其中之一吗?

我真的想添加单元测试的存在,这样你就可以知道你的应用程序会工作 - 但是代码点火器没有那个,所以如果你对你的两个选择很僵硬,我想你自己就是无论哪种方式.


ter*_*ško 7

以下是来自CodeIgniter 2.1.0的几个代码片段.看看它们然后告诉我这是2012年php代码应该是什么样子:

  • 来自system/core/CodeIgniter.php

    if (function_exists("set_time_limit") == TRUE AND @ini_get("safe_mode") == 0)
    {
        @set_time_limit(300);
    }
    // -- snip --
    $CFG =& load_class('Config', 'core');
    // -- snip --
    $UNI =& load_class('Utf8', 'core');
    // -- snip --
    function &get_instance()
    {
        return CI_Controller::get_instance();
    }
    // -- snip --
    
    Run Code Online (Sandbox Code Playgroud)
  • 来自system/database/DB.php

    if ( ! isset($active_record) OR $active_record == TRUE)
    {
        require_once(BASEPATH.'database/DB_active_rec.php');
    
        if ( ! class_exists('CI_DB'))
        {
            eval('class CI_DB extends CI_DB_active_record { }');
        }
    }
    else
    {
        if ( ! class_exists('CI_DB'))
        {
            eval('class CI_DB extends CI_DB_driver { }');
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • index.php

    if (defined('ENVIRONMENT'))
    {
         switch (ENVIRONMENT)
         {
              case 'development':
                   error_reporting(E_ALL);
              break;
              case 'testing':
              case 'production':
                   error_reporting(0);
              break;
              default:
                   exit('The application environment is not set correctly.');
         }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    直到PHP 5.4都E_ALL没有包含E_STRICT,这意味着"开发环境"隐藏了一些错误.在生产环境中,所有错误,而不是ini_set('display_errors', false);,这将是合理的选择.

这应该说明CodeIgniter 的优越代码质量......

你最初选择一个有意义的框架,然后开始抛出像"可扩展"和"灵活性"这样的花哨字样.

  • 你必须有不同的定义或单词"美丽"和"OOP" (3认同)
  • @ AD7six,`eval()`部分很有趣.更严重的是他们仍在使用`$ foo =&new Bar;`语法.它隐藏在`$ foo =&load_class('Bar','core')之后;`现在.大多数CI代码库仍然基于为php4制作的代码.并且`$ CI =&get_instance();`只是可爱......他们应该只是削减行为并用`global $ CI替换它;`..会让它更容易混淆. (2认同)
  • @tounano ..调用静态函数不是OOP (2认同)