Grails适合复杂的应用吗?

时间:2011-10-23 22:57:33

标签: web-applications grails groovy

我们的组织正计划使用Grails来实现复杂功能 应用程序与REST接口。我对可扩展性感到担忧 框架,鉴于:

  • 域类肯定会大量使用多态。我听说人们在Grails中有继承问题,例如because of this problem on JIRA

  • 对象树将保存在数据库中。在GORM中,这将是 类似的东西:

    class Node
    {
      static def hasMany = [children: Node]
    }
    

    我认为我们可以从级联操作中受益来管理依赖项,但我不确定它在这种情况下会如何工作。

  • 数据库应该增长以存储数百万个对象 并且应该与Oracle,SQL Server和PostgreSQL一起使用。依靠Grails数据库映射来实现这种免费兼容性是多么现实?

  • 我们计划利用自定义域约束进行检查 域对象的一致性。但我觉得你在验证器中可以做的事情是有限的(例如,我不确定你是否可以加载一组其他对象)

  • 在服务中实现的业务逻辑将是多线程的

书籍和网络上的大多数例子都很简单 CRUD操作应用于独立的对象集。

我担心我最终会使用该功能的一小部分 应用程序增长时的Grails,如脚手架,Web流,ajax或 甚至域类生成的数据库模式也可​​能不对应 完全符合我申请的需要。

有没有人有经验可以分享使用Grails这样的 应用

4 个答案:

答案 0 :(得分:8)

  

域类肯定会大量使用多态。我听说   人们在Grails中有继承问题,例如因为   这个问题在JIRA上。

Grails 2.0中的继承已得到改进。请参阅Abstract Inheritance部分。报告的JIRA错误中提到的问题可以通过将属性声明为瞬态来解决。

  

对象树将保存在数据库中。在GORM中,这将是:

自我参照关系很好。有关详细信息,请参阅第3章中的Grails。

  

数据库应该增长到存储数百万个对象,并且应该与Oracle,SQL Server和PostgreSQL一起使用。依靠Grails数据库映射来获得免费的兼容性是多么现实?

Grails构建于Hibernate之上,Hibernate是一个企业级的ORM层,用于各种大型J2EE应用程序。根据您运行的查询类型,您可能需要使用标准并调整该级别的内容,但Grails没有提供任何固有的限制,以防止扩展。

  

我们计划利用自定义域约束机制来检查域对象的一致性。但我觉得你在验证器中可以做的事情是有限的(例如,我不确定你是否可以加载一组其他对象)

您可以使用this进行跨字段验证。您还可以定义自己的custom validator classes

  

在服务中实现的业务逻辑将是多线程的

It is recommended not to store state in services,但您可以在多线程操作中使用它们,因为有不同的scopes可用。当然,您有责任控制并发访问。

  

我们的组织正计划使用Grails通过REST接口实现复杂的应用程序。

使用Grails,REST界面非常有趣和轻松。请参阅Grails in ActionBeginning Groovy and Grails from Novice to Professional第11章或第9/13章。

Grails构建于久经考验且经过验证的J2EE技术​​之上,如SpringHibernate。虽然“开箱即用”可能只带你到目前为止,但框架可以在各个级别进行配置以满足您的需求。所以你基本上都在询问J2EE是否能很好地扩展。 Many people seem to say yes

答案 1 :(得分:7)

Twitter最初是在Ruby on Rails上发布的。最终他们有可扩展性问题,不得不替换部分(他们选择使用Scala)。最近他们用Java替换了所有其余的Ruby / rails,允许他们重新利用9/10的服务器,因为效率提高了。

那么问问Ruby / Rails是否满足了他们的需求?

见鬼。他们的产品非常迅速地推向市场,工作人员可以使用他们知道的语言让他们在那里使用。

后来当他们拿钱来解决这个问题时,他们就这样做了。

我认为这是Ruby on Rails,Java和敏捷思维方式的一个伟大成功故事。

你会发现一个与Grails类似的故事(可能有点不太受支持,但后来会更接近一个架构(J2EE),这将允许你在必要时进行扩展)

答案 2 :(得分:6)

(1)可以与班级一起解决。不是最好的解决方案,但在您需要多重继承之前可能会有效。毕竟,你不必处理与Grails的关系。

(2)取决于你需要什么。 Grails和Hibernate do support tree mapping。顺便说一句,如果你不确切地知道它应该如何表现,那么无论如何,这都是你需要手工制作一些复杂行为的标志。

(3)确实如此。我们在DB2,MySQL,hsql和Postgre中有数十万条记录。无论如何,它已经被时间证明了。

(4)没错,你最好不要在验证器中对DB进行任何查询 - 至少是通过GORM,因为它会flush()当前不一致的会话。虽然,我相信你仍然可以在那里使用SQL或withNewSession{}

(5)我发现服务中的多线程没有任何问题。您可以很好地控制Service实例化,就像Request-scoped Service可以使用Singleton服务(如果需要Singleton),后者使用完整的并发线程编写。

是的,Grails是一个很好的快速入门,因为上市时间非常重要。

答案 3 :(得分:0)

此问题的最佳答案是展示使用Grails Web应用程序框架构建的初创公司的一些示例:Grails Startups