Ant*_*ine 4 grails groovy web-applications
我们的组织正计划使用Grails通过REST接口实现复杂的应用程序.我担心框架的可扩展性,因为:
域类肯定会大量使用多态.我听说人们在Grails中有继承问题,例如因为JIRA上的这个问题.
对象树将保存在数据库中.在GORM中,这将是:
class Node
{
static def hasMany = [children: Node]
}
Run Code Online (Sandbox Code Playgroud)
我认为我们可以从级联操作中受益来管理依赖项,但我不确定它在这种情况下会如何工作.
数据库应该增长到存储数百万个对象,并且应该与Oracle,SQL Server和PostgreSQL一起使用.依靠Grails数据库映射来实现免费兼容性有多现实?
我们计划利用自定义域约束来检查域对象的一致性.但我觉得你在验证器中可以做的事情是有限的(例如,我不确定你是否可以加载一组其他对象)
在服务中实现的业务逻辑将是多线程的
书籍和网络上的大多数示例都显示了非常简单的应用程序,在独立的对象集上使用CRUD操作.
我担心,当应用程序增长时,我最终会使用Grails功能的一小部分,因为脚手架,Web流,ajax,甚至域类生成的DB模式可能与我的应用程序的需求不完全对应.
有没有人有经验分享使用Grails进行此类应用程序?
域类肯定会大量使用多态.我听说人们在Grails中有继承问题,例如因为JIRA上的这个问题.
Grails 2.0中的继承已得到改进.请参阅有关抽象继承的部分.报告的JIRA错误中提到的问题可以通过将属性声明为瞬态来解决.
对象树将保存在数据库中.在GORM中,这将是:
自我指涉关系很好.有关详细信息,请参阅Grails in Action第3章.
数据库应该增长到存储数百万个对象,并且应该与Oracle,SQL Server和PostgreSQL一起使用.依靠Grails数据库映射来实现免费兼容性有多现实?
Grails构建于Hibernate之上,Hibernate是一种企业级ORM层,用于各种大型J2EE应用程序.根据您运行的查询类型,您可能需要使用标准并调整该级别的内容,但Grails没有提供任何固有限制来防止扩展.
我们计划利用自定义域约束机制来检查域对象的一致性.但我觉得你在验证器中可以做的事情是有限的(例如,我不确定你是否可以加载一组其他对象)
您可以使用此进行跨领域验证.您还可以定义自己的自定义验证程序类.
在服务中实现的业务逻辑将是多线程的
建议不要在服务中存储状态,但可以在多线程操作中使用它们,因为有不同的可用范围.当然,您有责任控制并发访问.
我们的组织正计划使用Grails通过REST接口实现复杂的应用程序.
使用Grails,REST界面非常有趣和简单.请参阅Grails in Action第11章或第9/13章从Beginning Groovy和Grails从新手到专业.
Grails建立在久经考验的J2EE技术(如Spring和Hibernate)之上.虽然"开箱即用"可能只带你到目前为止,但框架可以在各个级别进行配置以满足您的需求.所以你基本上都在询问J2EE是否能很好地扩展.很多人似乎都说是的.
Twitter最初是在Ruby on Rails上发布的.最终他们有可扩展性问题,不得不替换部分(他们选择使用Scala).最近他们用Java替换了所有其余的Ruby/rails,允许他们重新利用9/10的服务器,因为效率提高了.
那么问问Ruby/Rails是否满足了他们的需求?
当然好.他们的产品非常迅速地推向市场,员工可以使用他们知道的语言让他们在那里获得.
后来,当他们拿钱来解决问题时,他们做到了.
我发现这是Ruby on Rails,Java和敏捷思维方式的一个伟大的成功故事.
您将在Grails中找到类似的故事(它可能稍微不太受支持,但随后将更接近于允许您在必要时进行扩展的体系结构(J2EE))
(1)可以与班级一起工作.不是最好的解决方案,但在您需要多重继承之前可能会有效.毕竟,您不必处理与Grails的关系.
(2)取决于你需要什么.Grails和Hibernate 确实支持树映射.顺便说一句,如果你不确切地知道它应该如何表现,那么无论如何,这都是你需要手工制作一些复杂行为的标志.
(3)是的.我们在DB2,MySQL,hsql和Postgre中有数十万条记录.无论如何,它已被时间证明是Hibernate.
(4)没错,你最好不要在验证器中对DB进行任何查询 - 至少是通过GORM,因为它将flush()是当前不一致的会话.虽然,我相信你仍然可以使用SQL或withNewSession{}在那里.
(5)我发现服务中的多线程没有问题.您可以很好地控制Service实例化,就像Request-scoped Service可以使用Singleton服务(如果需要Singleton),后者在完全考虑并发线程的情况下编写.
是的,Grails是一个很好的快速入门,因为上市时间非常重要.