代码之家  ›  专栏  ›  技术社区  ›  Tom

PHP表单:条令与推进

  •  124
  • Tom  · 技术社区  · 15 年前

    我正在开始一个新项目 symfony 很容易与 Doctrine Propel 但我当然需要做出选择…我想知道更多的有经验的人是否对这两个方面都有普遍的利弊?

    谢谢。

    编辑: 谢谢你的回答,有用的东西。这个问题没有真正正确的答案,所以我只会把获得最受欢迎的选票的那个标记为“已批准”。

    10 回复  |  直到 7 年前
        1
  •  74
  •   phidah    15 年前

    我同意教义。在我看来,这是一个更加活跃的项目,作为symfony的默认ORM,它得到了更好的支持(尽管官方认为ORM是平等的)。

    此外,我更喜欢您处理查询的方式(DQL而不是标准):

    <?php
    // Propel
    $c = new Criteria();
    $c->add(ExamplePeer::ID, 20);
    $items = ExamplePeer::doSelectJoinFoobar($c);
    
    // Doctrine
    $items = Doctrine_Query::create()
           ->from('Example e')
           ->leftJoin('e.Foobar')
           ->where('e.id = ?', 20)
           ->execute();
    ?>
    

    (教义的实施对我来说更直观)。

    另外,我真的更喜欢你在教义中管理关系的方式。

    我认为教义文件中的这一页值得一读: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained

    总而言之:如果我要开始一个新的项目,或者必须在学习教义和推进之间做出选择,我会在任何一天都坚持教义。

        2
  •  39
  •   Jan Fabry    15 年前

    我有偏见,因为我在下一个版本的推进上提供了一点帮助,但是你必须考虑到推进确实是第一个可用的ORM,然后在创建学说时有点滞后,但现在又有了积极的发展。symfony 1.3/1.4配备了推进1.4,其中大多数比较停止在推进1.3。另外,下一个版本的推进(1.5)将包含很多改进,特别是在创建您的标准(导致您编写的代码更少)方面。

    我喜欢推进,因为它看起来不像条令那么复杂:大多数代码在生成的很少的类中,而条令在很多类中分解了功能。我喜欢对我正在使用的图书馆有一个很好的了解(不是太多的“魔法”),但当然,我对推进有更多的经验,所以也许理论在幕后并不那么复杂。有人说推进速度更快,但你应该自己检查一下,并考虑一下这是否超过其他差异。

    也许您还应该考虑为不同的框架提供symfony插件。我相信推进在这里有一个优势,但我不知道有多少列出的插件仍然是最新版本的symfony的最新版本。

        3
  •  21
  •   lo_fye    15 年前

    这取决于个人喜好。 我之所以使用推进,是因为(除其他外)我喜欢这样一个事实:每件事都有自己的具体getter&setter方法。在理论上,情况并非如此。

    推进:

    $person->setName('Derek');
    echo $person->getName();
    

    教条:

    $person->name = 'Derek';
    echo $person->name;
    

    我喜欢拥有getter&setter的原因是,如果需要的话,我可以在其中加入各种逻辑。但这只是我个人的喜好。

    我还应该补充说,虽然推进在过去是缓慢的,但现在又在积极发展。在过去的几个月里,它发布了几个新版本。最新版本的推进包括 类似于条令的“流畅的查询界面” 如果你不想再使用标准了。

        4
  •  20
  •   Prof. Falken    14 年前

    应该注意 Doctrine 2 目前正在开发中 released [编辑]和功能几乎完全不同于当前稳定版本的学说1。它依赖于数据映射器模式而不是活动记录,并使用“实体管理器”来处理持久性逻辑。当发布时,它将与Java的Hibernate更接近(原则1更像Rails的ActurEcRoRD)。

    我一直在用教义2的alpha版本开发,必须说它是高于教义1的头和肩(只是我的观点,我从未使用过推进)。当教义团体被释放时,很有可能朝着它前进。

    我鼓励你去看看教义,但是如果你更喜欢推进和教义现在使用的主动记录样式,你可能只想坚持推进。

        5
  •  5
  •   Mauricio Herrán    15 年前

    这两个参考有点过时,所以你仍然涵盖了一些一般性的内容,基本上你必须评估你在框架方面的经验,因此,原则的一个主要缺点是没有一个能够让你自动编码的IDE,在这个驱动中,你是一个胜利者,学习曲线推进和原则是非常不同的,它更容易pRopel,如果你的项目需要管理复杂的数据模型使用原则,如果你想快速使用一个文档记录最好的ORM,并在推进互联网使用中找到更多的支持,它会更加成熟,我相信大多数使用。

    http://propel.posterous.com/propel-141-is-out

        6
  •  5
  •   petkopara    9 年前

    我建议使用推进1.6,这对IDE的自动完成功能更好。

        7
  •  2
  •   Trav L    15 年前

    我不是php 5非框架ORM的用户,但这里有一些很好的比较文章(如果您还没有看到它们的话):

    http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/

    http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine

    这两个结论都倾向于将信条作为symfony的新一代ORM。

        8
  •  2
  •   Ryan Rentfro    7 年前

    在使用这两种方法很多年之后,我更喜欢使用推进2而不是仅仅基于如何构建查询逻辑的学说。信条是尽可能深入的,并且管理它的许多方面与深度水平相匹配。推进我觉得有一个更流动和对象驱动的方式来构建和管理查询交互。

    对我来说,这导致了模型中的代码减少,围绕如何处理逻辑产生了更多的结构。这导致了将许多交互构建为通用功能。(毕竟,对数据库所做的90%的操作只是某种程度上的CRUD操作。)

    最后,两者都是强大的、可管理的,并将完成工作。我的个人项目和兴趣使用推进ORM2和未来的项目,如果仍然用PHP编写,将走这条路。

    在过去的3-4年里,我每天都在使用这两种方法。

        9
  •  1
  •   Mike Crowe    15 年前

    我建议使用 DbFinder Plugin .这实际上是一个非常强大的插件,它支持这两种功能,并且非常强大。实际上,我更喜欢使用它。

        10
  •  -3
  •   c9s    9 年前

    如果我没有错的话,两个表单都使用基于XML的模式,并且创建这些模式定义相当麻烦。如果您需要一个基于PHP的、风格流畅的简单模式。你可以试试Lazyrecord https://github.com/c9s/LazyRecord 它支持自动迁移和升级/降级脚本生成器。所有类文件都是静态生成的,不需要运行时开销。