相比Tapestry5框架,Play框架有什么优势?你推荐哪一个并为什么?
以下是我发现的相似之处:
- 两者都是无状态框架(我知道Play更无状态)
- 两者都通过实时类重载大大提高了开发人员的生产力
为什么会选择其中之一?我已经使用过两种方法来完成'Hello World'类型的应用程序,感觉两者非常相似。
相比Tapestry5框架,Play框架有什么优势?你推荐哪一个并为什么?
以下是我发现的相似之处:
为什么会选择其中之一?我已经使用过两种方法来完成'Hello World'类型的应用程序,感觉两者非常相似。
需要注意的是,Play似乎不与标准应用程序服务器直接兼容;它不使用Servlet API,而是使用自己的Request和Reponse定义。
每个请求都重新编译/加载Java类,这相当严格(如果我记得没错的话,这是JavaOne演讲中提到的)。
它不是基于组件的,而是基于操作的框架,就像Struts或SpringMVC一样;它使用的模板比JSP更好,但缺少Tapestry的全周期方法。 Tapestry的许多强大功能来自于从简单元素构建复杂功能。
Tapestry包含了处理嵌入在JAR中的资源(图像、样式表、JavaScript库)非常复杂的技术。对于用户和开发人员来说都是透明的,只需将JAR放在类路径上,它们就会自动加载和配置。
我认为Play!有一些好的想法和非常好的名字,但它在不同的联赛中进行比赛,与Tapestry相比,它相当严格地避免任何服务器端状态... Tapestry则使用有限量的服务器端状态,并仔细管理该状态,这在很大程度上是为了支持重定向后发布语义。
在操作导向的框架中,当相同的行为跨越许多不同的页面时,你只能走得这么远。虽然我个人认为即使是单页面应用程序,也会使用Tapestry,但的确,Tapestry在开发大型应用程序和大型团队时表现得非常出色。
我对Tapestry没有直接的经验。但是在我们使用Play的项目中,我的一个同事曾经使用过它,并且他对它非常失望。他有很多抱怨,但你可以在这里找到大部分列出的。
就个人而言,我认为Play和其他框架之间的主要比较点是:
如果你的框架像Play一样支持所有这些功能,那么你可以深入了解细节,例如它是无状态/有状态框架等。
*Wayback机器版本,因为该帖子已从堆栈溢出中删除。
顺便说一句,Tapestry 5 in action书籍现已在MEAP上发布。
请注意,我对Play一无所知,只是试图回答您提出的问题。如果您想了解Tapestry的更多优点(不是与Play相比,而是框架的整体优势),请给我发消息。我很乐意写更多(特别是因为我正在说服客户从Spring转换到T5,任何练习都受欢迎;))
问候 Michał
所以,从我的角度来看,这是这两个令人难以置信的框架之间的主要区别之一。
Matt Raible(即使有争议;)said你不应该选择框架从它们能做什么,而是关注它们不能做什么!这显然是主要的辩论!他们都可以做出伟大的作品,但在两种略微不同的方式中:)
Play!框架相对于Tapestry5的好处有:
Tapestry5也有第三方模块 - 但它们不会为您节省时间,而是会消耗时间。大部分都没有得到维护,您总是需要派生、理解和修改所有第三方代码,以便其能够与最新的Tapestry版本一起运行。最终,自己编写一切要容易得多。总体来说,Tapestry5的成本更高,因为您需要计算代码维护。在每次Tapestry升级时,您需要更改代码,因为方法已过时 - 不仅是您自己的代码,还有所有其他集成的第三方模块。这是一个巨大的时间杀手并且非常昂贵。
与Play!相比,您可以轻松获取Facebook/oAuth认证等内容,并且它可以在框架的下一次更新中完美运行,这是一个巨大的成本优势。
一般来说,我认为Java Web应用程序的开发、维护和托管成本最高。然而,使用Play!框架,这个计算变得更好了——尽管有时候方法不够“智能”。但是,如果时间到市场和开发成本很重要,可以选择Play!或其他技术,比如Ruby on Rails或PHP。然而,Ruby on Rails开发人员和Java开发人员一样昂贵。