大头痛:CodeIgniter或自定义框架,什么';是你的想法


Big Headache: CodeIgniter or custom made framework, what's your thoughts?

如果你想开发一个WebApp,并且你知道它会随着时间的推移而不断扩大,你会使用CodeIgniter还是你定制的框架?

你支持使用开源框架的理由是什么?你反对开源框架的原因是什么?

以下是我的想法:CodeIgniter Pros

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

CodeIgniter Cons

  • 如果我想增长,不确定它的可扩展性
  • 麻省理工学院许可证-不确定这意味着什么,但如果我想在每个许可证的基础上销售我的应用程序,我不确定我是否能够做到

自定义编码Framkework Pros

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

自定义编码框架Cons

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

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

使用已经存在的东西。

为什么CI

为什么要把你的选择限制在一个框架内——这会让你的选择成为一个近乎稻草人的论点——你的心不会告诉你写自己的框架——你的自我会这样做。如果你在开始之前消除了大量的其他框架,那么你已经走上了。。很多工作。

CI是一个相当糟糕的选择。

在撰写本文时,Php的版本是5.4.0-如果你可以选择新项目使用什么框架-认真考虑使用一个使用5.3+功能的框架-或者已经在路上了。不要选择一个遗留代码库中充满php4风格代码的框架。

CI Cons

如果我想发展,不确定它的可扩展性有多大

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

MIT许可

对于如何使用麻省理工学院许可的软件,实际上没有任何限制。将MIT理解为"不要删除或修改框架文件中的许可证块",仅此而已。

自定义编码框架优点

可扩展。我可以决定它将如何生长。

你确定你知道什么是可伸缩的吗:)

我拥有代码

在几乎所有情况下都是正确的——如果你使用麻省理工学院许可的框架,这一点肯定是正确的。

灵活设计

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

自定义编码框架Cons

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

现实地说,除非你构建一个能够与现有框架竞争的框架,否则这是不会发生的(即使有好的文档)。

需要投入时间来维护框架

不要低估这需要花费的时间。

意外错误/错误

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

总结

  1. php框架需要大量的工作和维护。很多-我的意思是很多
  2. 花在框架级代码上的时间是不会花在自己的应用程序功能上的时间
  3. 使用php框架意味着您可以从(希望)更有经验的开发人员的经验中获益。如果没有高昂的学习成本,为什么x不起作用,或者为什么y让你的应用程序面临一些安全问题
  4. 每当某个东西工作不正常时,你都不确定它是在你的应用程序代码中还是在你的框架代码中(不管怎样,这都是真的,但你会希望有信心知道框架"刚刚工作",你的问题就在你的应用程序代码中)
  5. 每当你眨眼的时候,就会有一个新的php框架,它们在某种程度上都很糟糕——你想成为其中之一吗

我真的很想添加单元测试的存在,这样你就可以知道你的应用程序会工作——但代码点火器没有这一点,所以如果你对两种选择都很严格,我想你可以自己选择。

以下是CodeIgniter 2.1.0中的一些代码片段……看看它们,然后告诉我php代码在2012年应该是这样的:

  • 来自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 --
    
  • 来自系统/数据库/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,这意味着"开发环境"隐藏了一些错误。在生产环境中,hie是所有错误,而不是ini_set('display_errors', false);,这将是合理的选择。

这应该说明CodeIgniter的卓越代码质量。。。

不如你先选择一个有意义的框架,然后开始抛出"可扩展"answers"灵活性"等花哨的词。

我想说的是使用已经编写好的东西。我真的不知道CodeIgniter,所以我不能评论它的可伸缩性,但如果经过一些调查,可伸缩性不是你想要的,那么看看其他一些PHP框架。一定会有一个你可以作为应用程序的基础。

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

在我6年的经验中,我可以告诉你,代码维护是而不是一个笑话。这需要大量的思考、仔细的计划和努力。当你谈论一个框架时,编写单元测试是不可避免的。

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

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

  2. 如果你喜欢使用一个使用真正MVC模式并强制执行最佳实践的框架(最终使你成为一个更好、有纪律的程序员),并且也会提供良好性能,那么就使用CakePHP 2.0。有一个庞大的社区,你会发现很多插件/组件已经针对常见问题进行了编码。加快发展。

  3. 如果您真的想使用PHP 5.3+的强大性能、灵活性和更小的占地面积,请使用锂。如果你对编程相对陌生,这个框架将提供更陡峭的学习曲线。它将强制执行最佳实践,并向您介绍一种新的、更好的思维方式。

还有其他很棒的PHP框架。然而,由于我在上面提到的那些方面花了很多时间,所以我想让你知道我对这些方面的看法。

希望能有所帮助。

两者都不适用。不要编写自己的框架。这是大量工作,最晚在安全方面,它很可能会失败。

另一方面,不要使用CodeIgniter,因为你不能在那里使用任何现代设计模式。参见本文:为什么CodeIgniter是死

我建议你使用另一个框架——也许是zend。或者,您将完成该步骤,甚至使用JSF或GWT。

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

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

可扩展。我可以决定它将如何生长。

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

对我来说,所有"官方"框架的主要缺点是过于臃肿。考虑到兼容性,它们支持数千个微不足道的问题,使代码膨胀
如果你想修改代码的某些部分,你就有麻烦了。这个代码很大,你根本不知道。你需要很长时间才能学会。

对我来说,官方框架的主要优势甚至不是文档,而是google一个社区。一个叫做互联网的知识库。在国内框架下工作时,有时我会感到"谷歌病",当我想在谷歌上搜索一些问题时,这是一种身体节制,但我知道我什么都找不到。

这实际上取决于你有多雄心勃勃,你必须投入多少时间。我为我的公司开发了一个非常有效的框架,我们在它的基础上构建了一个CMS,大约有30个安装在那里,几乎没有问题。(我们的其他开发人员使用它没有问题,因为他们可以在遇到问题时问我,这通常会让调试变得更容易,因为我对它了如指掌。)

但不要低估做和维护它所花费的时间。无论你开始时认为你的想法有多好,你都会通过使用它来意识到,你总能做出改进。他们太多了。最终,这就是为什么我建立了一些自定义。因为当我遇到新的问题时,我可以开发新的解决方案,最终以我可以支配的方式提高框架的灵活性。

如果你决定使用第三方选项(老实说,这通常是最好的主意),不要使用代码点火器。它是为PHP4开发的,在功能和通用OOP风格方面非常缺乏。

如果你想开发一个WebApp,我建议你:篝火我觉得很有用。它基于CodeIgniter框架