更新:Tapestry 5.2 已经发布,所以它并没有像以前看起来那样被放弃。我的经验是 Tapestry 4,而不是 5,所以你的里程可能会有所不同。这些年来,我对 Tapestry 的看法发生了变化。我已经修改了这篇文章以反映它。
我不能再像以前那样推荐 Tapestry。Tapestry 5 似乎是一个重大改进,但我对 Tapestry 的主要问题不在于平台本身;它与它背后的人有关。
从历史上看,Tapestry 的每个主要版本更新都打破了带有极端偏见的向后兼容性,远远超出了人们的预期。这似乎是由于采用了新的编码技术或需要大量重写的技术。
Howard Lewis Ship(Tapestry 的主要作者)当然是一位出色的开发人员,但我不能说我关心他对 Tapestry 项目的管理。Tapestry 5 的开发几乎是在 Tapestry 4 发布后立即开始的。据我所知,Ship 非常投入,将 Tapestry 4 留给了其他贡献者,我觉得这些贡献者的能力不如 Ship。在痛苦地从 Tapestry 3 切换到 Tapestry 4 之后,我感觉自己几乎立即被抛弃了。
当然,随着 Tapestry 5 的发布,Tapestry 4 成为了遗留产品。如果升级路径不再那么残酷,我不会有这个问题。所以现在我们的开发团队处于一个相当不值得羡慕的位置:我们可以继续使用一个基本上被废弃的 Web 平台(Tapestry 4),对 Tapestry 5 进行令人发指的升级,或者完全放弃 Tapestry 并使用另一个平台重写我们的应用程序。这些选项都不是很有吸引力。
据说 Tapestry 5 的编写是为了减少从现在开始更新中断的可能性。一个很好的例子是页面类:在以前的版本中,页面类是从 Tapestry 提供的基类继承而来的;此类中不兼容的 API 更改是导致大量向后兼容性问题的原因。在 Tapestry 5 中,页面是 POJO,在运行时通过注释使用“魔法 Tapestry 仙尘”进行了增强。因此,只要维护注释合同,Tapestry 的更改就不会影响您的页面类。
如果这是正确的,那么使用 Tapestry 5 编写一个新的应用程序可能会很好。但就个人而言,我不想再把手放在燃烧器上。