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

时间:2012-03-26 08:04:37

标签: php codeigniter

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

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

以下是我的想法: CodeIgniter专业人士

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

CodeIgniter缺点

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

自定义编码的Framkework专业人士

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

自定义编码框架缺点

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

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

8 个答案:

答案 0 :(得分:17)

使用已存在的东西。

为什么CI

为什么要将你的选择限制在一个框架内 - 它使你的选择接近straw man argument你的心并没有告诉你自己编写框架 - 你的自我就是这样。如果你在开始之前消除了大量其他框架 - 你已经开始了很多工作。

CI是一个非常糟糕的单选。

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

CI缺点

  

如果我想要成长

,不确定它的可扩展性

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

  

麻省理工学院许可证

对如何使用MIT许可软件几乎没有限制。将MIT读为“不要删除或修改框架文件中的许可证块”。

自定义编码框架专业人员

  

可扩展的。我可以决定它会如何发展。

您确定知道可扩展性意味着什么:)

  

我拥有代码

几乎在所有情况下都是正确的 - 如果您使用MIT许可框架,那肯定是正确的。

  

灵活的设计

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

自定义编码框架缺点

  

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

实际上,除非你构建一个能够与现有框架竞争的框架(即使有良好的文档)。

  

需要投入时间来维护框架

不要低估需要多长时间。

  

意外错误/错误

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

总结

  1. 一个php框架需要做很多工作,需要维护很多。而且很多 - 我的意思是很多
  2. 您花在框架级代码上的时间是您不会花在自己的应用程序功能上的时间。
  3. 使用php框架意味着您可以从(希望)更有经验的开发人员的经验中受益。如果没有高成本的学习困难,为什么x不起作用,或者为什么让你的应用程序对某些安全问题敞开大门。
  4. 每当某些内容无法正常工作时,您无法确定它是否在您的应用代码或您的框架代码中(无论如何都是如此,但您需要有信心知道框架“正常”并且您的问题在您的应用代码中)
  5. 每次你眨眼都有一个新的PHP框架,他们都会以某种方式吮吸 - 你想成为其中之一吗?
  6. 我真的想添加单元测试的存在,这样你才能知道你的应用程序是否可行 - 但是代码点火器没有那个,所以如果你对你的两个选择很僵硬,我想你是在无论哪种方式你自己。

答案 1 :(得分: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 --
    
  • 来自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 { }');
        }
    }
    
  • 来自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.');
         }
    }
    

    在PHP 5.4之前,E_ALL不包含E_STRICT,这意味着“开发环境”隐藏了一些错误。在生产环境中,所有错误都是ini_set('display_errors', false);,而不是{{1}},这将是合理的选择。

这应该说明CodeIgniter的高级代码质量......

你首先选择一个有意义的框架,然后开始抛出像“可扩展”和“灵活性”这样的奇特词语。

答案 2 :(得分:4)

我会说已经写好了。我真的不知道CodeIgniter,所以我不能评论它的可伸缩性,但是如果经过一些调查后可扩展性不是你想要的,那么看一下那里存在的其他一些PHP框架。 肯定会有一个你可以建立你的应用程序。

答案 3 :(得分:2)

如果您准备投入时间来构建自己的框架,那么,就像上面提到的大多数人一样,您最终会花费大量时间来修复错误/错误,最重要的是维护它。

在我6年的经验中,我可以告诉你,代码维护不是一个笑话。需要经过深思熟虑,精心策划和努力。当你谈论一个框架时,编写单元测试就变得不可避免了。

您可以投入不到一半的时间来学习使用5.3+或即将推出的新PHP框架。我的建议是:

  1. 如果您希望使用遗留代码和原始编程风格,请使用CodeIgniter。但是你绝对可以在CodeIgniter之上构建一个自定义frameowrk并在不改变核心的情况下轻松增强它。你从CodeIgniter中获得性能,但你将失去许多其他好东西,最重要的是PHP 5.3+提供的新功能,尤其是5.4。

  2. 如果您想使用一个使用真正的MVC模式并实施最佳实践的框架(并最终使您成为一个更好,更有纪律的编码器),并使用CakePHP 2.0,并且也会提供良好的性能。有一个庞大的社区,你会发现很多插件/组件已经针对常见问题进行了编码。因此加速发展。

  3. 如果你真的想要使用PHP 5.3+的强大功能,那么就可以使用Lithium,具有出色的性能,灵活性和更小的占用空间。如果您对编程比较陌生,这个框架将提供更陡峭的学习曲线。它将强制执行最佳实践,并向您介绍一种新的更好的思维方式。

  4. 还有其他很棒的PHP框架。但是,由于我花时间在上面提到的那些,所以我让你知道我的鸟类对这些的看法。

    希望有所帮助。

答案 4 :(得分:2)

两者都不。 不要写自己的框架。这是很多的工作,最迟在安全方面它很可能会失败。

另一方面,不要使用CodeIgniter,因为你不能在那里使用任何现代设计模式。请参阅此文章:Why CodeIgniter is dead

我建议你使用另一个框架 - 也许是zend。或者您将执行该步骤,甚至使用JSFGWT

答案 5 :(得分:0)

  

所有开发时间都投入到业务逻辑中。

你忘记了学习曲线。
所有的开发时间都投入到业务逻辑中,是的 但在你开始之前,你必须学习全新的语言,这不是你所知道的PHP,而是完全不同的语言。很多次更大。

  

可扩展的。我可以决定它会如何发展。

只有你经验丰富,才能知道所有可能的问题 我们都在不断地学习,而且凭借我现在的知识,我会在一年前做出其他一些决定。

对我而言,所有“官方”框架的主要缺点 - 它们都是臃肿的。考虑到兼容性,它们支持数千个可忽略不计的问题,使代码膨胀 如果你想修改代码的某些部分 - 你遇到了麻烦。代码很大,你不知道它。你需要很长时间来学习它。

官方框架对我来说的主要优势甚至不是文档,而是 google。社区。一个叫做Internet的知识库。有时我会使用国内框架感觉“谷歌病”,当我想谷歌解决一些问题时,这是一种身体上的禁欲,但我知道我什么都找不到。

答案 6 :(得分:0)

这实际上取决于你有多雄心勃勃以及你需要花多少时间。我为我的公司开发了一个工作得很好的框架,我们在它上面构建了一个CMS,其中有30个安装在那里,几乎没有问题。 (我们的其他开发人员使用它没有问题,因为他们可以问我什么时候遇到问题,它通常会使调试更容易,因为我知道这就像我的手背。)

但是,不要低估进行和维护它的时间。无论你在开始时如何看待自己的想法,你都会意识到,通过使用它,你总能做出改进。他们过多。最终,这就是为什么我建立了自定义的东西。因为当我遇到新问题时,我可以开发新颖的解决方案,最终以我能够指示的方式提高框架的灵活性。

如果您决定使用第三方选项(实际上通常是最好的主意),请不要使用Code Igniter。它是为PHP 4开发的,非常缺乏功能和一般的OOP风格。

答案 7 :(得分:-1)

如果您想开发WebApp,我建议您:bonfire我觉得它很有用。它基于CodeIgniter框架