推荐的服务器端架构(框架/堆栈)与GET一起用于大型应用程序

时间:2012-08-26 17:14:44

标签: gwt architecture server-side

过去2天我一直在研究这个问题,差不多3天了。我觉得我已经在阳光下搜索了所有关于这个问题的东西(包括这些论坛),而且几乎所有的都是tutorialed-out。在我详细讨论这个问题之前,我只想简要概述一下项目的范围和计划,看看哪种方案最适合:

- 大型申请,非平凡的 -50+ DB表
- 大用户群
- 用户管理/认证/会话
-transactions
- 安全
-MVP(根据GWT建议)
- 专注于性能和可扩展性(自然:),毕竟我使用GWT)
- 更喜欢坚持使用Java服务器端

我还阅读并观看了大型应用程序(Google / GWT)架构的所有最佳实践。在上一次谈话中,我发现涉及GWT的最佳架构实践是由Ray Ryan在2010年发现的,他在声明他们认为JavaBeans和属性更改事件的效果不是很好,所以最好将DTO用于模型。

在我搜索中出现的两个框架是Seam和Spring。

坚持使用MVP,我的域名大部分都是具有胖客户端的数据服务。但是,我仍然希望服务器端具有安全性和会话功能,因为我希望用户能够保持状态,即使他们不使用cookie,例如他们最终会刷新。我还希望有一个像Hibernate这样的ORM来管理很多事务方面。我还想使用RequestFactory,并且一直在考虑使用Spring。

我想我可以将问题缩小到:

考虑到上述情况,推荐的应用程序堆栈对于大型GWT应用程序是什么,特别是服务器端和与GWT的集成?

这是我这个规模的第一个项目,我想做的最后一件事就是在失去大量时间和精力的情况下走错路。非常感谢您的帮助,我真的只是想弄清楚这一点,所以我可以回到编码而不是谷歌搜索地球的两端;)。

-Seth

我已经看过Best architecture for applications in GWT,我发现它可能是最接近这个,但它并没有真正回答我的问题,我觉得我的目标更具针对性更具体的用例< / p>

1 个答案:

答案 0 :(得分:3)

我没有使用Seam的任何经验,但是我正在使用前端的GWT和后端的Spring处理一个相对较大的项目,到目前为止它确实有效好(RequestFactory,JPA2 / Hibernate,PostgreSQL)。顺便说一句,你也可以结账JBoss Erai

使用Spring的好处是,添加新功能非常简单。例如,我添加了对 openid身份验证的支持,我所要做的就是在maven中定义一个额外的依赖项,在配置文件中添加一些额外的行,现在通过google,facebook,twitter帐户进行身份验证。框。
这种分层方法具有很多优点。

但是如果你真的坚持开发GWT应用程序(MVP等)的最佳实践,你最终会得到两个或多或少的独立项目。这有点不同于你开发传统的Spring MVC / Web Flow应用程序,你只有一个或多或少的项目(顺便说一句:查看Thomas Broyer的gwt maven archetypes,它可以帮助你找到一个好的项目结构)。

除此之外,当您在客户端使用MVP时,您的后端实际上仅用作向GWT客户端提供数据的数据服务。所有flow synchronization都将在您的GWT应用中处理 因此,您可能不会使用许多后端功能(即Spring MVC的MVC部分) 我使用RequestFactory进行后端和前端之间的数据通信,对于CRUD应用程序,这非常有用(它也支持Android btw)。 但是,如果您想支持更多客户,则可能更倾向于使用Restless方法。再次在后端使用Spring,向您的应用添加Restless支持相对容易,并且有几个第三方库支持GWT中的休息服务(RestyGWT,{{3 }})。

以下是关于开发过程的一些想法:

  • 使用依赖关系管理系统,例如maven。它使团队开发变得非常容易,并将您的项目拆分为可管理的单元/模块(例如,GWT maven应用程序可以分为前端部分(GWT),后端(Spring)部分和共享(comong DTO,等)部分。
  • 尝试测试驱动开发(TDD或BDD)。例如,在Spring后端创建服务函数之前(即getAllProducts())为它编写一个Unit测试。这也有助于创建一个良好的服务层,因为通过编写单元测试,您可以定义服务层应该执行的操作。
  • Restlet”:不要在早期优化中投入太多时间。
  • 考虑购买/使用Premature optimization is the root of all evil,特别是如果您使用Spring。相对较大的Spring应用可能会有相对较长的启动时间。 JRebel可帮助您在不重新加载/重新启动应用程序的情况下更改后端中的类。它节省了大量时间。
  • 在域级别上实施 ACL 并非易事。 Spring Security中有 ACL 类,它们适用于简单的用例,但是如果您有复杂的用例(例如根据ACL条目过滤项目列表),这可能非常复杂如果你想有效地做到这一点。另一方面,Spring使用另一个库(即Apache Shiro)相对容易。此外,您必须确保在前端显示正确的控件(即,如果用户没有编辑权限,则不显示“编辑”按钮等)。使用JSP很简单,因为您在后端创建UI(HTML页面)。在GWT你必须自己做。