从头开始设计大规模Java webapp的建议

Chr*_*son 7 java gwt spring

我即将开始开发一个大型系统,我正在努力朝着哪个方向前进.之前我已经完成了大量的Java Web应用程序,并且我有很多servlet容器和GWT的经验以及一些Spring的经验.问题是我的大多数webapps都被抛在了一起只是为了成为一个概念证明,而我正在努力解决的是使用什么样的框架.我需要同时拥有基于浏览器的应用程序以及旨在支持从移动设备(Android和iPhone)访问的Web服务.理想情况下,我想以这样的方式设计这个系统,我不会为每个客户端(浏览器和手机)重写所有的servlet,尽管我不介意在那里做一些小的检查以正确格式化数据.

此外,虽然我现在是唯一的开发人员,但未来的情况不一定如此,我想设计一些在流量和开发人员数量方面都能很好地扩展的东西(不仅仅是一场噩梦)保持).

所以我现在正在计划使用GWT来设计基于浏览器的界面,但我正在努力解决如何重用该代码来为移动设备呈现界面(很可能是xml).我认为使用GWT RPC会使浏览器中的所有AJAX变得相对容易,但可能会使手机生成xml变得困难.另外,我喜欢使用Hibernate等持久性和Spring Security来保护整个事物的想法.再次,我不确定那些与GWT合作的程度如何(我认为Hibernate应该没问题......)

显然这比我在这里介绍的要多得多,但我试着给你5分钟的概述.我有点难过,想知道社区中是否有人从这个地方开始有任何经验.我想做的事情有意义吗?这是现实的吗?我毫不怀疑我可以让所有这些框架使用相同的语言,我只是想知道是否值得花时间与他们战斗.另外,我错过了一个真正有益的框架吗?

在此先感谢并抱歉相对广泛的问题......

克里斯

Lau*_*nen 3

因为我有一些相关经验,所以我会在这里非常具体。并非我要写的所有内容都适用,但我希望有些东西可以。

我的建议是,让任何直接依赖于任何框架的代码尽可能“愚蠢”。如果可以的话,请考虑此类代码或多或少是一次性的(实施方面,暴露给客户端的 API 合约当然需要稳定)。

专注于使您的应用程序独一无二的因素,并尝试使其独立于 GWT 等。外观模式是我可以推荐的一种模式 - 将特定于应用程序的逻辑保留在后面,并通过将表示层与其连接来公开它,这对我们很有帮助。如果您的后端依赖于第三方基础设施(通过 Web 服务等),请使用适配器模式将这些依赖项与您的代码解耦。

在过去的 5 年中,我花了大部分工作时间来构建在很多方面与您所描述的内容相匹配的东西。如今,它更像是一个应用程序框架,而不是一个应用程序 - 它有几个不同的浏览器界面(WAP/标准 Web+ajax/Facebook 应用程序)、一个用于 2 路 SMS 使用的界面,以及一个用于大型移动客户端的 REST/XML 界面 - BREW 、iPhone、Android 和黑莓。

当谈到框架时,为了持久化,我们使用了Hibernate。所有不同的代码片段都与 Spring 捆绑在一起。浏览器界面已从 Struts (1.x) 移植到 Wicket。SMS 和移动客户端界面构建在 Restlet 之上。

使用多个不同的表示层框架(例如我们案例中的 Wicket 和 Restlet)并不是问题,只要代码保持精简并且业务规则不参与其中(尽可能)。没有什么规定您的浏览器界面必须与您的移动客户端界面打包到相同的 WAR 中 - 使用 Spring,您可以轻松地将多个 Web 应用程序连接到相同的外观。这对我们很有帮助,特别是允许多个开发人员在应用程序的独立部分上工作。

在我看来,试图在表示层中实现代码的最大重用弊大于利。这一直是我们应用程序中最不稳定的部分,超出了我们的预期。