有没有使用过“Play”Java Web开发框架的经验?

63

2
对我来说,这似乎是又一个应用程序框架。 - skaffman
9个回答

71
  • 我同意Jason的观点,Play可能会比Grails更好。我已经完成了四个Grails项目(之前完成了两个Tapestry项目和一个Wicket项目),现在正在认真考虑下一步该用Play。
  • 我认为Grails很酷的一点是“一切都是Groovy”。也就是说,除了HTML和CSS之外,你使用Groovy编写所有内容-领域、控制器、服务、页面模板(GSP)、标签库、Hibernate API(GORM)、单元测试(GUnit)和构建脚本(GANT)。你甚至可以使用Groovy编写shell脚本。因此,能够使用单一语言编写应用程序的所有方面似乎是一种长期以来应有的简化方式-回到使用单一语言(如C++或Delphi)编写桌面应用的时代。然而,我已经学到了,这里没有一种大小合适的方法。
  • 首先,对于Groovy的IDE支持不是很好。IntelliJ做得最好,但由于Groovy是动态的,它只能走得那么远。重构工具不能捕捉到所有内容,因此您不能百分之百地信任它们。这意味着您必须特别注意单元测试。再次强调,因为Grails如此依赖于运行时发生的各种动态“魔法”,所以Grails中的单元测试必须依赖于广泛的模拟层来模拟它,而那个模拟层则很古怪。第三个问题是您编写的许多所谓的Groovy代码实际上是特定于域的语言(DSL)代码。(简单地说,DSL是Groovy的简写,利用了Groovy中大量可选的语法这一事实。)Grails使用不同的DSL来进行各种配置、URL映射等,并且不一致。例如,您如何指定log4j设置看起来与您如何指定数据源完全不同,两者都与Groovy基础上的纯Java不同。因此,“一切都是Groovy”的承诺也就破灭了。
  • 既然情况如此,我理解Play团队的想法。
  • 对于领域、控制器、服务和 JUnit,回归到传统的 Java 是有道理的。强类型意味着 IDE 可以可靠地帮助处理智能提示、代码导航、重构等。(因此,如果您喜欢 Eclipse,就不需要支付 IntelliJ 的费用。)为了获得强大的工具支持而编写更冗长的代码对我来说是一个不错的选择。我们会看到的。

  • 我喜欢仍然可以在页面模板中使用 Groovy。但我担心可能会在模板中放置比应该多的代码。

  • 我没有使用过 JPA,但它似乎与 GORM 对我来说非常接近,所以这很酷。

  • Grails 中的 Spring IOC 支持完全透明,而 Play 的支持似乎很少;但是,我认为 IOC 被过度使用了,我非常愿意手动编写 Spring XML 映射,只有在我真正需要时才这样做。(我的一个未解决的问题是,我认为 JPA 有事务支持,这就是为什么像 Grails 那样它不需要 Spring 的原因,对吧?)

  • 我从来都不喜欢 Python,所以当我看到 Play 使用 Python 构建脚本时,我感到非常不爽。但是我同意 Grails 的 GANT 脚本运行得很慢。此外,虽然 GANT 是 XML ANT 的重大改进,但仍然很难理解 ANT 的概念。Grails 的 GANT 脚本非常复杂。所以,我会持开放的态度去尝试。

  • Play 的 "应用程序模块" 模型听起来就像 Grails 的 "插件" 模型,这很酷。

  • 我对我已经阅读过的 Play 文档印象非常深刻。我一开始有很多问题,但其中一半问题直接得到了答案。

  • 随着进一步深入学习,我稍后还会再次汇报。


    1
    非常感谢您分享有关Grails的经验。我也对Play的文档印象深刻... - opensas
    好答案,如果是我的问题,我会将其标记为正确。 - Randin
    玩了几天play!之后,我被它迷住了。我离为了一个项目从Ruby回到Java只差一步之遥... - jbwiv
    Play!也兼容于Scala。 - Donald T
    五年后...克雷格,这么久过去了,你现在的感觉如何? - Adriano

    28

    我尝试了Play,印象非常不错:它提供了一个非常简单的开发模型,比大多数框架都要简单。最重要的是,运行时在“开发模式”下能够直接解析 .java 文件的能力非常有用:只需重新加载浏览器中的网页,而无需运行构建脚本或等待重新部署,就能大大提高开发速度。此外,浏览器中显示的错误消息也非常好。

    另一个给我留下深刻印象的是整体美感:教程应用程序看起来真的很不错(代码和网页设计都很好看),虽然这可能只是一个细节,但这延伸到整个框架、API以及文档。


    1
    我在这个主题上撰写了更多的内容:http://www.lunatech-research.com/archives/2010/03/15/play-framework-usability - Peter Hilton
    提到“整体美感”+1。 - fastcodejava

    9
    在同事的推荐下,我看了一下这个东西,按照教程做了一遍,然后就迷上了它。在浏览器中立即得到反馈意味着你不必使用IDE。我喜欢Eclipse,但是让我们面对现实吧:添加一些额外功能之后,它不如一个简单的文本编辑器稳定。在Mac上使用TextMate,你甚至可以点击浏览器中的错误信息,TextMate会弹出并将光标放在那一行上。
    在Play中进行测试也非常方便,只需按一个按钮即可运行单元测试、功能测试和基于Selenium的测试。
    Play很令人兴奋,因为它还很小而且简单。它只使用ant来构建,在25秒内完成构建。为美丽的文档作出贡献只需要编辑.textile文件并在任何play应用程序中重新加载文档。
    这就是我开始翻译教程,使用Scala,根据需要添加Scala支持,使其尽可能好用的原因。

    1
    在Scala上+1。它真的可以提高你的生产力。 - Magnus

    9
    我喜欢这个框架,我用它来做小项目,到目前为止看起来非常适合。 然而,有一件事情我非常想要的却被故意省略了:服务/DAO/模型层的分离!文档明确指出,Play 的目标之一是避免“无血缘关系的数据模型”: http://www.playframework.org/documentation/1.0.1/model 但是从我的经验来看,当应用程序需要重构时,经典的服务/DAO/模型层分离可以节省大量开发时间!使用 Play 你只能使用依赖于特定事务管理和特殊性的静态方法...... 不过,总的来说还是非常赞的,因为它能提高开发速度、代码清晰度,最终……很好玩!

    6

    我曾经使用过Grails、Tapestry 4/5以及纯Java/JSP/Spring/Hibernate。

    我认为这是很长时间以来第一次朝着正确的方向迈进。Grails是一个非常好的第一步,但Play!看起来像是有真正潜力的东西。Scala支持将在1.1版本中推出。如果我有机会用Clojure编写我的控制器/领域模型,那我就入坑了 ;)


    我在想能否一直使用Groovy... 我想是可以的... 无论如何,我认为值得尝试一下Scala... - opensas

    4

    在过去的一年中,我们使用Play! 1.2.4版本已经发布18个小版本,生产了一个名为“absences”的校园内部应用程序(参与者:100多名教师,700多名学生和行政团队),并且没有发现任何明显的错误。客户端使用Adobe的FLEX 4.6编写(非常漂亮的视图)。数据以AMF3格式(Cinnamon模块)发送和接收。我们使用基于JPA EclipseLink和MySql的简单dao层来访问数据库。该应用程序存储在Linux虚拟服务器上。我是Play的忠实开发者,因为它的简单性和高效率的方法。


    该应用程序现在在 Windows 服务器上使用 Play 2.2.3 运行(来自 IT 管理员的请求)。 - jcstritt

    3

    我目前在工作中使用Play框架构建Web应用程序,该框架可进行大规模数据处理。我必须说,Play提供的速度非常显著,比RoR提供的速度更快。此外,Play是基于Java的框架,因此可以轻松地进行多线程处理。接下来是当您使用像Japid和Netty这样的基于Java的模块与Play一起使用时,您将获得卓越的性能。这就像可以无限制地进行性能调整。在我看来,这是一个必须尝试的。


    3

    我喜欢Play的外观,但还没有尝试过。从浏览文档中发现一件事情比较突出,那就是大量使用静态方法。从单元测试的角度来看,这总是让事情变得更加困难(我在想模拟),并且与典型Java开发中的“面向对象”思想背道而驰。也许这就是重点,但这只是让我稍微有些失去热情……


    我认为他们的论点是控制器只是行为,没有任何数据,就像一个函数库,所以它们并不是真正的对象...但无论如何,我理解你关于模拟的观点... - opensas

    2

    我正在一个小项目中使用Play,它似乎正是他们所说的那样。但我认为框架应该自带一项功能:能够使用多个数据源(例如使用多个数据库模式)。这是我目前发现的唯一缺失的功能。

    敬礼, Uilian


    1
    这也是早期Django存在的问题,但我相信随着框架的成熟,这个问题会得到解决。它将成为一个重大的投诉。 - Andrei Taranchenko
    你的意思是同时使用多个数据库吗? - rogerdpack
    2
    请注意,有一个 play 模块允许使用多个数据库。这可能在回答时不是真实的情况,但已经改变了。 - Codemwnci

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接