为什么一个非常好的PHP框架 - Qcodo(或Qcubed - 它的分支) - 是如此不受欢迎?

时间:2009-05-08 19:57:53

标签: php orm frameworks event-handling code-generation

我想知道为什么这个框架(QCodo)几乎被遗忘并且完全不受欢迎。

几年前我就开始使用它了,这是唯一让我使用PHP的东西。是的...它的发展陷入困境(这就是为什么现在有更活跃的分支Qcubed)但它仍然是非常好的软件。

其主要优势:

  • 事件驱动(类似于asp.net)没有意大利面条代码
  • 强大的代码生成
  • 好ORM
  • 关注DRY
  • 非常简单的AJAX支持
  • 写起来很有趣

从那以后我想成为时尚并检查Django,但我无法编写基于请求的正常Web应用程序(它感觉不对)。

不信? chess.com是用它写的,当然还有很多其他的。

我的两个问题是:

  1. 你听说过吗(PHP人)?
  2. 如果您正在使用它,您对此有何看法(向我们展示您的工作示例)
  3. 由于

24 个答案:

答案 0 :(得分:33)

我已经使用PHP很多年了,从来没有听说过它。

答案 1 :(得分:17)

  1. Qcodo的创造者从未真正推广过这个框架,因此没有产生大量的追随者。我相信他们创造它主要是为了他们自己的用途,但也提供给其他人。如果您正在寻找代码生成框架,那真是太棒了。它确实有学习曲线。因此,为了充分利用它,最好花时间研究这些例子。

  2. Qcodo在一年多的时间里确实没有积极的发展,并且很快就会有很多机会在Qcodo上继续开发。 Qcodo似乎正在慢慢死去。

  3. Qcodo的分支机构Qcubed正在积极开发中,并且自2008年11月以来一直在使用。它是由Qcodo的用户创建的,他们对Qcodo缺乏进展感到沮丧。如果您刚刚开始,请从这里开始,而不是使用Qcodo。但是使用Qcodo论坛搜索您可能遇到的问题/问题。

  4. Qcodo和Qcubed是很棒的框架。不要因为你没有听说过而打折或低估它们。

答案 2 :(得分:9)

在PHP中模拟ASP.NET或Wicket并不是一件好事。而且,代码风格对我来说并不好看。

$this->btnSavePage = new QButton($this);
$this->btnSavePage->Text = "Save";
$this->btnSavePage->Visible = false;

$this->btnCancelEdit = new QButton($this);
$this->btnCancelEdit->Text = "Cancel";
$this->btnCancelEdit->Visible = false;

匈牙利表示法?我的天啊。我需要创建一个大对象来创建一个按钮?我很重。

答案 3 :(得分:5)

是的,我们在Chess.com上使用它,总体而言对此非常满意。当你每天获得超过一百万的综合浏览量时,试图弄清楚如何/在哪里存储所有这些QFormStates会有问题。每个页面视图都是自己的QFormState!我们通过将所有这些都放入memcache来解决这个问题!它确实有一点学习曲线,但一旦你知道它,你就再也不需要文档了。我实际上完全不再使用QQ,而是在我们的ORM文件中使用所有自定义sql。 QQ不够强大,无法进行大量优化的查询,高度优化的查询比数据库抽象更重要。毕竟,该网站需要运作和快速。这是我们的User类中的一个示例ORM静态方法,用于从数据库加载随机用户(我们曾经使用它来在我们的成员页面上显示随机的“用户聚光灯”)。注意它是如何使用从数据库的,而不是我们的主数据库(自定义构建函数)。它还使用memcache,以便随机用户每10分钟(600s)更改一次。

public static function LoadRandom($blnAvatarRequired = true, $blnForce = false) {
  $strCacheKey = MyMemcache::QueryToKey("User->LoadRandom()");
  if($blnForce || false === ($objUser = MyMemcache::G()->GetQuery($strCacheKey))) {
    $objDatabase = QApplication::GetSlaveDbConnection();

    $DaysAgo = new QDateTime(QDateTime::Now);
    $DaysAgo->AddDays(-10); //make sure this is an active member

    // Setup the SQL Query
    $strAvatarReq = $blnAvatarRequired ? ' and u.has_avatar':'';
    $strQuery = "
      select
        u.*
      from
        user u
      where
        u.is_enabled=1 and
        u.create_date > '$DaysAgo'
        $strAvatarReq
      order by
        rand()
      limit
        1
    ";

    // Perform the Query and Instantiate the Result
    $objDbResult = $objDatabase->Query($strQuery);
    $objUser = User::InstantiateDbRow($objDbResult->GetNextRow());
    MyMemcache::G()->SetQuery($strCacheKey, $objUser, null, 600);
  }

  return $objUser;
}

答案 4 :(得分:5)

我们在3个项目中使用Qcubed和Qcodo,这些是我们曾经拥有的最干净,最容易维护的项目!这是很棒的东西,很容易理解。 只需进入代码,您就不需要太多手册了。

Qcubed社区目前要强大得多,所以你可能想在Qcodo论坛上查看基本问题的答案,但是在Qcubed论坛上发帖。

我们将继续留在这个梦幻般的产品和社区!

此致 TRONICS

http://www.twitter.com/qcodo

答案 5 :(得分:4)

不,我从来没有听说过。

我听说的主要是Zend,CakePHP,Symfony,Code Igniter,还有一两个其他的我不记得的名字。

答案 6 :(得分:2)

我一直在做PHP开关工作大约3年,从未听说过。要求任何人命名PHP框架,你会得到通常的嫌疑人:Code Igniter,Cake,Zend等。

猜猜QCodo开发人员需要进行一些营销工作!

答案 7 :(得分:2)

两年前我开始使用它。亲:

  1. 从数据库生成代码
  2. ORM面向对象
  3. 简单使用ajax
  4. 缺点:

    1. qcubed社区不是那么擅长进行一个有新想法的项目
    2. 新代码不属于Mike Ho。
    3. qforms状态的错误,qcodo / qcubed的形式。
    4. 不受欢迎。
    5. 他们不想继续使用DDD和正向工程。
    6. 表单仅适用于启用js。
    7. 是用PHP编写的。
    8. 新插件系统设计不佳。
    9. 目前,Grails似乎是最好的框架,非常面向DDD,可以使用任何现有的Java代码,良好的模板库,可以使用不同的js框架,构建在Hibernate和Spring之上。使用Grails可以编写简单的Web应用程序或财务应用程序。

      我希望将来不要使用PHP,但是因为我知道Qcubed / Qcodo,如果有必要,我会使用它。对于新手,我推荐Symfony,更大的社区,插件,功能丰富,它有一个更安全的未来。

      更新

      • 无数据库迁移,无法跟踪数据库架构更改
      • 没有反映生成哪些表的架构
      • 它不是为真正的TDD设计的,测试模型,控制器和视图并不容易。他们刚刚为不友好的测试Web框架添加了测试框架
      • 在使用多个控件并触发Ajax错误并阻止应用程序时,QForms仍会出现问题并且可能会失去状态。
      • ORM在长期使用(很多繁琐/冗余代码)非常无聊,无法使用Rails控制台等工具进行测试,最终使用纯SQL并使用phpMyAdmin测试它需要的时间更少。
      • ORM中也存在错误,有时当我将字段声明为整数(代码生成的查询)时,我会得到一个字符串。
      • 没有前端控制器和路由系统,框架在公共路径内!插件也安装在公共路径中!
      • 奇怪的目录结构与其他MVC框架不太相似,而M代表的只是ORM而不是模型。
      • 不像Rails或Symfony那样使用link_to标签和许多其他标签。
      • 复杂的metacontrols只对浪费时间有用。
      • 框架专注于脚手架,当在Rails中它没有被大量使用,因为大多数开发人员使用以用户为中心的设计而不是以数据为中心的设计。
      • 视图充满了对象 - >渲染,JS和自定义控件很难定制,而不是留在模板内部,而是在具有逻辑会话的类中。所有内容。
      • 它不适用于PHP 5.3(未经测试但应予以解决)和Quercus。
      • Rails / Grails有大量的插件可以做任何事情。

      我可以继续,但我认为你明白了。只需学习Rails或Grails几个月,然后让我知道你的想法。

      我正在将我的Qcodo项目转移到Rails,我有一个很棒的环境,很好的社区,网络上的大部分创新都是围绕着Ruby和Rails。 Rails已被多次评选为最佳Web开发工具,并且是唯一可以替代Java或.net

      的工具

答案 8 :(得分:2)

我已经使用QCodo 2年了,现在我和QCubed一起使用。

这是开发和维护Web应用程序的好方法,也是部署代码和测试代码的最简单方法。请记住,QCubed现在正在逐渐被接受,这对所有QCodo社区都有好处。

我认为框架可以节省大量的开发时间,但在很多情况下,不建议您使用所有的Web开发。

答案 9 :(得分:1)

我从beta 2开始就一直在使用QCodo,现在我是QCubed的核心贡献者,所以是的,我听说过它。

最初让我了解框架的是代码生成。我来自asp.net和codesmith,并且很高兴找到一个框架,它给了我asp.net的事件驱动方法和代码生成器的代码生成。

我也很喜欢它是纯粹的OO PHP,这意味着我不需要学习一种新语言来开发我的PHP应用程序,并且自定义框架的任何方面都不像我想要的那样简单。< / p>

所有这一切使我们能够创建一个易于维护和强大的学习管理系统,我们已经出售给许多财富500强企业并为其提供主机。

存在一些缺点,例如ORM方法的运行时开销,但代码的可读性和干净的布局导致能够更轻松地简化应用程序的其他方面,并显着缩短开发时间,并且产生的虫子数量。

由于QCubed是一个社区驱动的项目,任何人都可以提交门票,建议改进或讨论变更,项目进展非常明确,并且对建设性反馈持开放态度。

为了捍卫这里所说的一些消极的事情,我只想指出大多数所谓的“问题”的门票从未创建过。我鼓励任何遇到任何人的人请为我们创建一张票,以便我们查看http://qcu.be

答案 10 :(得分:1)

虽然我听说过它(Qcodo ......不是这个叉子)但我从未考虑过使用它。有大量的框架,只有这么多的需求。公关和思想共享在这种情况下非常重要,而且Qcodo也从未真正拥有过。现在我已经找到了一把,我没有时间,也没有兴趣开始学习新的框架。

答案 11 :(得分:1)

我使用QCodo / QCubed已有1。5年了。从我自己的框架开始,在某些时候看起来很混乱。那是我开始寻找更成熟的框架的时候。幸运的是我找到了QCodo。从那时起,我甚至从未考虑过寻找别的东西。该框架非常灵活和强大,您可以随心所欲地完成所有工作。

我几乎没有使用事件驱动架构的经验。因此,开始有点困难,因为可用的文档很少。但社区本身非常活跃,您可能会在1-2天(有时甚至是几小时)内回答您的新手问题。但目前文档级别更好,社区更活跃:)

我无能为力。如果我有一些问题/建议,我会尝试与核心开发人员讨论。在没有建设性讨论的情况下抱怨事情是蹩脚的。

我现在已经将QCodo / QCubed用于3-4个成功的项目。我使用它越多,我就越喜欢它:)而且,每当我有空余时间,我都会尝试帮助开发更好的框架。我可以说,我已经有超过10个人,我已经说服他现在开始使用QC;)我希望还会有更多人。

QCubed完全是岩石!

答案 12 :(得分:1)

此游泳日志使用mySwimLog

答案 13 :(得分:1)

好的,这是我想要讲述的关于这个Qcodo / Qcubed的事情:

  1. 它的辉煌。我不知道它有多棒。你说CodeIgniter? Symfony的?我说Qcubed。
  2. 当我想开始我正在开展的项目时,我调查了所有这些并通过维基百科文章登陆Qcodo网站,然后登陆Qcubed ......我很惊讶。

    我最喜欢的功能:

    1. 不需要SQL查询。当然,它可以完成,但大多数事情都得到了解决!
    2. 从核心功能中获取模板的速度。
    3. 创建自定义控件是CAKE的一部分(而不是CAKEPHP)。
    4. 完全连开车。拯救国家就像......“这会发生在哪里?”
    5. 没有学习曲线。只需查看Yii或Symfony exmaples,然后查看Qcubed示例。与其他人相比,它简单得多。
    6. 完整的AJAX支持。我喜欢这个。
    7. 没有JavaScripting。要求它做一些'javascript'动作,它是通过javascript完成的。将一个单词更改为'QAjaxAction',然后转到ajax。再次更改,页面重新加载。你还想要什么?
    8. 自动完成,类型转换(自动和手动控制)以及什么不是!
    9. 几乎所有内容的内联编辑!
    10. 是的,当谈到Yii时,冰淇淋上有几颗樱桃。但我认为Qcodo内心更多。

      您说身份验证支持?好吧,我在1天内创建了一个与Qcubed集成的版本。它与其他框架一起节省了一周的学习成果。 Qcubed rocks。

      是的,我讨厌它的缓慢发展。但我认为它即将完成! (可能我知道的东西太少了,但我能想象的东西似乎通过Qcubed解决了。)

      我希望它更受欢迎...我会在登陆他们的网页之前为我节省一周的搜索时间。

答案 14 :(得分:0)

我也来自dotNet / Codesmith环境。当我选择一个想要将dotNet站点翻译成PHP的项目时,我寻找了一个能够最好地模拟原始应用程序逻辑设置方式的框架。我发现的是膨胀的框架或框架,它们没有完全满足项目要求。

我在研究使用MyGeneration工具进行PHP代码生成时偶然发现了QCodo。从那以后我没有回头。易用性,快速构建复杂应用程序的能力以及真正的OO方法QCodo现在使用QCubed使其成为我的目的的最佳框架。

答案 15 :(得分:0)

我一直在使用QCodo,ZCodo和现在的QCubed已经有一段时间了。

我实际上选择它作为CakePHP的替代品,在我需要的时候,它还不够成熟,无法做我想要的事情。

我对它作为一个框架非常满意;它抽象的东西足够,但不会太多,以至于你忽略了编程。

我打算将它用于我将来负责的任何开发项目,我期待QCubed成为PHP5中最好的社区维护框架。

答案 16 :(得分:0)

http://www.piranhamethod.com/2009/04/09/qcodoqcubed/

我听说过它,我喜欢它。

答案 17 :(得分:0)

从未听说过。
已经开了4年以上的PHP

答案 18 :(得分:0)

快速的原因是人气和成功通常不会与技术上最好的一致。我相信任何技术人员都可以提出大量的例子。有很多东西可以促进平庸的解决方案,比如市场营销,先发优势,在一些引起人们注意的领域更好的触摸,在一些备受瞩目的应用程序中使用,或者只是简单的运气。

另一个原因是技术上看起来最好的对于那些做不同事情的人来说可能不会出现。

答案 19 :(得分:0)

我认为QCubed很棒,主要是因为你可以使用Ajax的方式(你不必{j}使用jQuery)。

一个非常有用的文件:http://www.qcodo.com/demos/QcodoClassLibrary.pdf

答案 20 :(得分:0)

4年前我选择了QCodo来开发我们的产品。我从来没有后悔 - 现在我们有3个开发人员,任何非OOP解决方案都行不通。我们已经安装了近50个客户 - 在Apache,IIS,我的SQL和SQLServer平台,Linux或W2003上。 F 设计非常出色,代码生成很棒,而且开发,扩展和维护非常简单。我现在无法阅读任何其他代码...

是的,营销很差,项目过去只依赖于创作者(Mike Ho)。所有这些都最近转移到Git,营销应该很快就会好转。而且,现在Mike Ho回来了!!!

答案 21 :(得分:0)

我在很少涉及Flash远程处理的项目中使用它,但我只在框架中使用ORM,因为我不喜欢像.NET这样的EDP。对于无状态网络来说,流程似乎并不正确。如果ORM可以作为单独的组件发布,那就太好了。

答案 22 :(得分:-2)

  1.   

    qcubed社区不是那么熟练地开展一个有新想法的项目

    无意义

  2.   

    新代码不在Mike Ho的水平。

    无意义

  3.   

    qforms状态的错误,qcodo / qcubed的形式。

    ...

  4.   

    不受欢迎。

    那是什么

  5.   

    他们不想继续使用DSL和正向工程。

    你的观点?每个不想走你路线的框架都是错的?我不想要你提出的建议

  6.   

    表单仅适用于启用js。

    你一定是在开玩笑吗?如果用户没有启用JS,那么他们就处于石器时代......

  7.   

    是用PHP编写的。

    无评论

  8.   

    新的插件系统设计不佳。

    根据你的意思?我也会对此说废话

  9. 显然,这张海报有一些隐藏的议程......我也仔细看过Symphony--我每次都会和QCubed一起讨论Symphony。对于大型应用程序或小型

答案 23 :(得分:-2)

  1. 我从来没有听说过。
  2. 我没用过它。