# Play和Grails框架的优缺点

**URL:** <https://www.isharkfly.com/t/play-grails/7160>\
**Category:** 程序语言\
**Created:** [May 15, 2015, 1:15pm UTC](https://www.isharkfly.com/t/play-grails/7160 "2015-05-15T13:15:44Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![honeymoose](https://www.isharkfly.com/user_avatar/www.isharkfly.com/honeymoose/32/20796_2.png) [@honeymoose](https://www.isharkfly.com/u/honeymoose)\
**Post date:** [May 15, 2015, 1:15pm UTC](https://www.isharkfly.com/t/play-grails/7160/1 "2015-05-15T13:15:44Z")

</div>

框架为程序员提供了一些有用的特性从而简化了应用开发的过程。Java开发人员经常使用框架，由于框架非常流行，因此市场上你会发现各种各样的Java框架。新手经常在论坛里面提问，“哪个Java框架最好？"

首先，没有一个框架是最好的，因为他们都有自己的优点和缺点。因此，你必须结合项目的需求来进行考虑。你必须考虑到像可伸缩性，复杂性，截止日期等关键因素，当然了，还有预算。

今天，我们来讨论下两个非常著名的Java框架，Play和Grails的优缺点。

![](https://www.isharkfly.com/images/transparent.png)

Play  
这是市场上当前最好用的框架之一了。开发人员喜欢它是因为它容易编程，可扩展并且功能强大。Play还可以使用Scala语言来进行开发。

我们来看下Play的一些主要特性。

开发人员在开发和测试阶段经常会做一些小的改动来验证最佳的方案。通常来说，他们需要重启系统才能看到他们做的改动。然而，如果你使用Play的话，你要做的只是刷新下浏览器就能马上看到最近的改动了。

它只有一个XML配置文件，并且大多数配置都要么是默认的，要么是自动设置的。

它不使用Servlets API。因此，开发人员才可以使用热插拔。

它的优点

你的开发效率会更高，因此你可以同时进行多个项目，并且在截止日期前将它们全部交付。

测试应用变得非常简单，并且测试提供的是真实的结果。  
用户接口非常直观

它的缺点

Scala是门相对复杂的语言，因此开发人员可能用它会觉得不太舒服。

它不支持向下兼容。比如,Play 2就不再兼容Play 1。因此，如果你计划迁移一个已经的应用到上面的话，你得重新再做一遍了。

它背后的架构等东西理解起来会比较困难。

虽然有很多插件，但都不太稳定。

Grails

这是另一个开源的Java开发框架。Grails是基于Hibernate, Spring和SiteMesh来构建的。它使用Groovy作为标准的开发语言，由于Groovy和Java很像，开发人员用Grails的话上手会很快。

我们来看下Grails的主要特性。

你可以反复地使用一段相同的代码来执行不同的操作。

简化了XML操作。

它的优点

开发周期很快

如果是小型或者中型的项目，Grails是你的理想选择。

框架提供了许多插件，让你的开发变得简单。

它的文档让人印象深刻

设置的过程非常简单。因此，用不了一个小时你就可以开始构建你的应用程序了。

简单的GORM。这可能需要花点时间去学，但一旦你熟悉了它，它绝对是非常强大的。

点一下刷新按钮你就能马上看到你做的改动了

Less CSS框架的插件。是的，管理CSS变得更轻松了。

动态配置特性。因此，你修改配置可以不用重启服务器。

它的缺点  
你需要和动态语言打交道。它的不好的一点就是容易出错，同时你还得忍受动态语言的其它缺点。

如果你开发的是一个多线程的应用。GORM可能会问题很多。

你得花钱去买IntelliJ Idea因为别的IDE要么不支持Grails，要么只支持有限的特性。

开发人员经常用def来声明变量，这和object是等效的。代码很难维护。

解释型语言很笨重，这直接影响到运行时间

你必须学习Groovy编程。

你可以使用GORM,但其它的任何ORM它都不支持

集成的过程很复杂。

正如你所看到的，每个框架都有自己的优缺点。因此，你不能依赖别人的意见。根据你项目的需求，自己选择该用Play还是Grails吧（注：当然可能两个都不用）。
