【发布时间】:2011-02-25 14:09:10
【问题描述】:
我一直在研究 Rails、Grails 等 Web 框架。我习惯于在 Spring Framework 中使用 Hibernate 来做应用程序......我想要更高效的东西。
我意识到的一件事是,虽然 Grails 中的某些东西很性感,但它也存在一些严重的问题。 Grails 的控制器:
1) 执行得非常好。它们似乎无法在运行时从超类扩展。我尝试这样做来添加基本操作和辅助方法,这似乎导致 grails 爆炸。
2) 基于过时的请求参数模型(而不是更好的表单支持对象)。
3) 很难测试。命令对象的处理方式完全不同......实际上编写测试比编写控制器代码要困难得多。
4) 命令对象的操作完全不同。它们是预先验证和绑定的,这与基本参数模型相比会导致很多不一致。
5) 命令对象不可重用,重用域类中的大部分内容(如约束和字段)在后面很痛苦。这在基本的 Spring 中是很简单的。为什么在 Grails 中做这件事不是微不足道的?
6) 生成的脚手架纯属垃圾。它没有概括插入和更新......它实际上在两个视图中复制/粘贴一堆代码:create.gsp 和 edit.gsp。这些观点本身就是一大堆小狗要做的事情。它使用低级参数而不是对象这一事实进一步加剧了这一点。
集成测试比 Spring 集成测试慢 30 倍。真恶心。
一些模拟测试很难编写,并且不能保证在部署时能够正常工作,我认为它不鼓励快速的 tdd 测试周期。
大多数事情在运行时似乎都搞砸了,比如添加标签库或其他任何东西。服务器重启问题根本没有解决。
我开始认为使用 Spring/Hibernate/Java 是唯一的出路。虽然启动时成本相当高,但我知道它最终会平稳下来。
很糟糕,我不能使用像 Scala 这样的语言...因为习惯上它与 Hibernate 非常不兼容。
此应用也不是基于数据库的普通 UI。它有一些,但它不会是一个懒散的。我现在对 Grails 感到非常害怕,因为它在 Controller 层中是多么的垃圾。
关于我能做什么的建议?
【问题讨论】:
-
“很糟糕,我不能使用像 Scala 这样的语言......因为习惯上它与 Hibernate 非常不兼容。” - 有趣,您能详细说明一下吗?
-
基本上,因为很多 spring/hibernate 方法接受或返回对象,你必须在你的代码中做很多 asInstanceOf[Bleh]。 scala 集合和 java 集合之间也存在不匹配,因此您需要添加一些额外的膨胀来转换它们。还有一个表现呢。使用注释时,scala 需要在每个参数周围使用 Array(...),因为它没有内置在 systax 中的单元素异常...这使得一些事情变得更加臃肿。
-
为什么要使用 instanceof ?为什么不添加有关对象类型的信息?
-
用 hibernate 试试 - 它不会工作。 Hibernate 和 Spring 有各种方法接受 Object 并返回 Object....所以如果你正在制作静态类型的方法,你必须对每个返回值执行 asInstanceOf[MyType] 。