我们的组织正计划使用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这样的 应用
答案 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 Action的Beginning Groovy and Grails from Novice to Professional第11章或第9/13章。
Grails构建于久经考验且经过验证的J2EE技术之上,如Spring和Hibernate。虽然“开箱即用”可能只带你到目前为止,但框架可以在各个级别进行配置以满足您的需求。所以你基本上都在询问J2EE是否能很好地扩展。 Many people seem to say yes
答案 1 :(得分:7)
那么问问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。