【问题标题】:Why a very good PHP framework - Qcodo (or Qcubed - its branch) - is so unpopular? [closed]为什么一个非常好的 PHP 框架 - Qcodo(或 Qcubed - 它的分支) - 如此不受欢迎? [关闭]
【发布时间】:2010-10-24 21:36:25
【问题描述】:

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

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

它的主要优点:

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

从那时起,我想变得时髦并检查 Django,但我无法编写正常的基于请求的 Web 应用程序(感觉不太对劲)。

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

我的两个问题是:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

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

      2. Qcodo 已经有一年多没有积极的开发了,而且在 Qcodo 上继续开发的可能性似乎不大。 Qcodo 似乎正在慢慢消亡。

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

      Qcodo 和 Qcubed 是很棒的框架。不要仅仅因为您没有听说过它们而贬低或低估它们。

      【讨论】:

      • 您认为可以克服社区的狭隘性吗?
      • Qcodo 回来了,更新了错误修复/改进,论坛再次活跃。社区正在增长,但为核心做出贡献的专业水平仍然比其他框架高出很多。但是,您不必成为专家即可获得 Qcodo 的好处。这些示例是最新的和可靠的。初学者应该看看那里。
      【解决方案3】:

      在 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;
      

      匈牙利符号?我的天啊。我需要创建一个大对象来创建一个按钮?对我来说很重。

      【讨论】:

      • +1 ,我看不出在 PHP 中模拟 ASP.NET 的意义。事件驱动的方法似乎总是更适合 windows 应用程序,而不是 web imo 的请求/响应模型。
      • 我同意其余的,但是如果使用得当,匈牙利符号有什么问题,就像在这种情况下一样?
      • 匈牙利表示法的名声非常糟糕,因为一位 Windows 程序员理解 Charles Simonyi 将类型用作字面上的变量类型,当今天成群的 IDE 可以很快告诉您这一点时,这一点都不好。他的意思是变量的用途是类型:joelonsoftware.com/articles/Wrong.html Joel 解释说它是非常宝贵的匈牙利符号。虽然它可能看起来有点奇怪且难以阅读,但一旦你习惯了它,你就不能没有它。
      【解决方案4】:

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

      公共静态函数 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); //确保这是一个活跃的成员 // 设置 SQL 查询 $strAvatarReq = $blnAvatarRequired ? ' 和 u.has_avatar':''; $str查询 = " 选择 你。* 从 用户你 在哪里 u.is_enabled=1 和 u.create_date > '$DaysAgo' $strAvatarReq 订购 兰德() 限制 1 "; // 执行查询并实例化结果 $objDbResult = $objDatabase->Query($strQuery); $objUser = User::InstantiateDbRow($objDbResult->GetNextRow()); MyMemcache::G()->SetQuery($strCacheKey, $objUser, null, 600); } 返回 $objUser; }

      【讨论】:

      • 感谢您提供的示例,它对您管理如此多的流量非常有用
      【解决方案5】:

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

      Qcubed 社区目前更加强大,因此您可能想在 Qcodo 论坛中查看您对基本问题的回答,但请在 Qcubed 论坛上发帖。

      我们将继续使用这个出色的产品和社区!

      问候, 电子学

      http://www.twitter.com/qcodo

      【讨论】:

      • 我们遇到了一些挑战,但在论坛上没有得到任何回应……您通常在哪里闲逛和阅读帖子?
      【解决方案6】:

      不,我从没听说过。

      我听说过的主要有 Zend、CakePHP、Symfony、Code Igniter,还有一两个我一时想不起名字的。

      【讨论】:

        【解决方案7】:

        我已经断断续续地从事 PHP 工作大约 3 年了,但从未听说过。让任何人说出 PHP 框架的名字,你会得到常见的嫌疑人:Code Igniter、Cake、Zend 等。

        猜想 QCodo 开发者需要在他们的营销方面做一些工作!

        【讨论】:

        • 他们根本没有营销 :)。我认为社区还不够大,无法获得动力。
        【解决方案8】:

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

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

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

        【讨论】:

          【解决方案9】:

          两年前我开始使用它。专业人士:

          1. 从数据库中生成代码
          2. ORM 面向对象
          3. ajax的简单使用

          缺点:

          1. qcubed 社区不太擅长开展具有新创意的项目
          2. 新代码不在 Mike Ho 级别。
          3. qforms 状态中的错误,qcodo/qcubed 的形式。
          4. 不受欢迎。
          5. 他们不想继续使用 DDD 和正向工程。
          6. 表单仅适用于启用 js 的情况。
          7. 用 PHP 编写。
          8. 新插件系统设计不佳。

          目前,Grails 似乎是最好的框架,非常面向 DDD,可以使用任何现有的 Java 代码,良好的模板库,可以使用不同的 js 框架,基于 Hibernate 和 Spring。使用 Grails 可以编写简单的 Web 应用程序或财务应用程序。

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

          更新:

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

          我可以继续,但我想你明白了。只需学习 Rails 或 Grails 几个月,然后告诉我你的想法。

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

          【讨论】:

          • Alex,试着用一些具体的概念来回答,阅读和更新你的知识。 Qcubed 社区的大多数成员的问题是他们没有我所说的那样。 Mike Ho 也表示不知道 DDD 是怎样的。阅读 infoq、Martin Fowlser 的博客、Rails、Grails、Spring 框架……以及更多。我说的是正确的,100%,如果你愿意,我可以提供参考。
          • 您好,您从 Qcodo 迁移到 Rails 的经验如何。任何提示和建议。我认为我们可能需要走那条路。
          • 我将在我的博客中发表一篇长文……可能不会 100% 详尽,但我希望对您有所帮助。您可以使用 SQL 视图按照 Rails 约定重构您的表或自定义您的模型,我正在使用视图,因此我可以改进旧表。我通过使用 PHPSESSID 并查询 PHP 应用程序以获取会话来集成会话,然后在 Rails 中创建会话。我有相同的 HTML 模板,所以用户看不到差异。我正在使用 Watir 对 PHP 和 Ruby(用 Ruby 编程)进行验收测试。在我的帖子中,我将介绍其他测试。我会在这里发布。
          • 我看了你的博客,只看到这个:“我将停止使用 Qcodo 和 Qcubed 作为 Web 框架,并将我当前的项目(企业内部网)迁移到 Ruby on Rails。”您能否详细说明原因以及您是如何做到的?有多痛?
          • 我如何从 Qcubed 迁移到 Rails:riccardotacconi.blogspot.com/2010/01/…
          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

            此游泳日志使用它mySwimLog

            【讨论】:

              【解决方案12】:

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

              最初吸引我进入该框架的是代码生成。我来自 asp.net 和 codesmith,很高兴找到一个框架,它为我提供了 asp.net 的事件驱动方法和 codesmith 的代码生成。

              我也喜欢它完全是纯 OO PHP,这意味着我不必学习一门新语言来开发我的 PHP 应用程序,并且自定义框架的任何不符合我想要的行为的方面都很简单。

              所有这些都使我们能够生产出易于维护且功能强大的学习管理系统,我们已向众多财富 500 强公司出售并托管该系统。

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

              由于 QCubed 是一个社区驱动的项目,任何人都可以提交工单、提出改进建议或讨论更改,项目的发展方向非常明确,并且非常愿意接受建设性的反馈。

              为了捍卫这里所说的一些负面内容,我将简单地指出,大多数所谓的“问题”根本就没有被创建。我鼓励任何遇到他们的人请创建一张票让我们查看http://qcu.be

              【讨论】:

                【解决方案13】:

                好的,关于这个 Qcodo / Qcubed 的事情,我想谈谈:

                1. 它的辉煌。我只是说它有多棒。你说 CodeIgniter?交响乐?我说 Qcubed。

                当我想开始我正在从事的项目时,我查看了所有这些并通过维基百科的文章,登陆 Qcodo 网站,然后登陆 Qcubed...我很惊讶。

                我最喜欢的功能:

                1. 不需要 SQL 查询。当然可以,但大多数事情都已经处理好了!
                2. 核心功能的模板操作。
                3. 创建自定义控件是 CAKE 的一部分(而不是 CAKEPHP)。
                4. 完全均匀驱动。保存状态就像......“这是在哪里发生的?”
                5. 没有学习曲线。只需查看 Yii 或 Symfony 示例,然后查看 Qcubed 示例。与其他人相比,它要简单得多。
                6. 完整的 AJAX 支持。我喜欢这个。
                7. 没有 JavaScript。要求它做一些“javascript”动作,它是由 javascript 完成的。将一个词更改为“QAjaxAction”,它会转到 ajax。再次更改,页面重新加载。你还想要什么?
                8. 自动完成、类型转换(自动和手动控制)等等!
                9. 几乎所有内容的内联编辑!

                是的,说到 Yii,冰淇淋上有一些樱桃。但我认为 Qcodo 有更多的内在。

                你说身份验证支持?好吧,我创建了一个在 1 天内与 Qcubed 集成。它为其他框架节省了一周的学习头痛。 Qcubed 岩石。

                是的,我讨厌它缓慢的发展。但我认为它接近完成! (可能是我知道的东西太少,但我能想象到的任何事情似乎都可以通过 Qcubed 解决)。

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

                【讨论】:

                  【解决方案14】:

                  我已经使用 QCodo/QCubed 1.5 年了。从我自己的框架开始,在某些时候看起来很混乱。那是我开始寻找更成熟的框架的时候。幸运的是,我找到了 QCodo。从那以后,我什至从未考虑过寻找其他东西。该框架非常灵活和强大,您可以用它做任何您想做的事情。

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

                  没有什么可以抱怨的。如果我有一些问题/建议,我会尝试与核心开发人员讨论。在没有建设性讨论的情况下抱怨事情是蹩脚的恕我直言。

                  我现在已经使用 QCodo/QCubed 进行了 3-4 个成功的项目。我用得越多,我就越喜欢它 :) 而且,每当我有空闲时间时,我都会努力帮助开发更好的框架。我可以说,我已经说服了 10 多个人现在开始使用 QC ;) 我希望还会有更多。

                  QCubed 完全震撼!

                  【讨论】:

                  • 您在哪里闲逛论坛以查看和回答问题。 qcodo 遇到了挑战,只有 2 个回复。但似乎周围的人比我们想象的要多。
                  • 安吉拉,之前没有看到你的评论。但是 QCodo 和 QCubed 论坛都是很不错的地方来回答你的问题。目前我会说 QCubed 论坛更加活跃。再说一次,如果您对特定的 QCubed 功能有疑问(QCodo 中不存在,无论如何它是唯一可以询问的地方)。你试过 qcubed 论坛吗?
                  【解决方案15】:

                  没听说过。
                  断断续续地做 PHP 4 年以上

                  【讨论】:

                    【解决方案16】:

                    【讨论】:

                      【解决方案17】:

                      我也来自 dotNet / Codesmith 环境。当我选择一个想要将 dotNet 站点转换为 PHP 的项目时,我寻找一个可以最好地模拟原始应用程序逻辑设置方式的框架。我发现要么是臃肿的框架,要么是没有完全满足项目要求的框架。

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

                      【讨论】:

                        【解决方案18】:

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

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

                        我对它作为一个框架感到非常满意;它对事物进行了足够的抽象,但又不会太多以至于您忽略了编程。

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

                        【讨论】:

                          【解决方案19】:

                          原因很简单,受欢迎程度和成功通常与技术上最好的东西不相符。我相信任何技术人员都能想出很多例子。有很多东西可以促进平庸的解决方案,例如营销、先发优势、在某些领域做得更好以引起人们的注意、被用于某些高调的应用程序,或者只是运气。

                          另一个原因是,在你看来技术上最好的东西在做不同事情的人看来可能并不那么好。

                          【讨论】:

                            【解决方案20】:

                            我认为 QCubed 很棒,主要是因为你可以使用 Ajax 的方式(你不用t have to write Jscript and you dont 必须使用 jQuery)。

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

                            【讨论】:

                              【解决方案21】:

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

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

                              【讨论】:

                                【解决方案22】:

                                我在几个涉及 Flash 远程处理的项目中使用过它,但我只在框架中使用 ORM,因为我不太喜欢像 .NET 这样的 EDP 东西。对于无状态 Web,流程似乎根本不合适。如果 ORM 可以作为单独的组件发布,那就太好了。

                                【讨论】:

                                  【解决方案23】:
                                  1. 我从未听说过。
                                  2. 我没用过。

                                  【讨论】:

                                  • 为什么-1 我回答了所有问题。 :)
                                  【解决方案24】:
                                  1. qcubed 社区不太擅长开展具有新创意的项目

                                    废话

                                  2. 新代码不是 Mike Ho 的水平。

                                    废话

                                  3. qforms状态的bug,qcodo/qcubed的形式。

                                    ??

                                  4. 不受欢迎。

                                    那又怎样

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

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

                                  6. 表单仅适用于启用 js。

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

                                  7. 用 PHP 编写。

                                    没有意见

                                  8. 新的插件系统设计不佳。

                                    根据你的说法?这个我也废话了

                                  很明显,这张海报有一些隐藏的议程......我也仔细研究了 Symphony - 我每次都会选择 QCubed 而不是 Symphony。适用于大型应用程序或小型应用程序

                                  【讨论】:

                                  • 那个发帖者只是来自 qcubed 论坛的一个巨魔——他什么也没做,并且一直抱怨说,当他除了“这太糟糕了”之外什么都没有提供时,没有人听他的。
                                  • 我不是巨魔,我开发了 Oracle 适配器并帮助其他用户。你总是以狭隘的理由阻止我的更改请求。 Rails 可以响应没有启用 js 的浏览器,这样做是一个好习惯,请阅读获取更新。当使用复杂的表单和 ajax 错误只会使应用程序反应迟钝时,js 控件序列化非常错误。我厌倦了向你解释我想做什么,但你从来不明白。我受够了你、你的朋友和你的 Qcubed。我在这里得到 2,你和朋友 -1。
                                  猜你喜欢
                                  • 1970-01-01
                                  • 1970-01-01
                                  • 2011-06-15
                                  • 2015-05-23
                                  • 2013-02-09
                                  • 2011-07-10
                                  • 2010-10-20
                                  • 2010-09-06
                                  • 1970-01-01
                                  相关资源
                                  最近更新 更多