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

时间:2010-06-13 03:06:07

标签: java spring gwt

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

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

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

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

提前致谢并对相对广泛的问题感到抱歉......

克里斯

1 个答案:

答案 0 :(得分:3)

因为我有一些相关的经验,所以我会非常具体。并非我所写的所有内容都适用,但我希望能有所作为。

我的建议是将任何直接依赖于任何框架的代码保持为“愚蠢”。如果可以,请考虑这些代码或多或少的一次性(实现明智,暴露给客户的API合同当然需要稳定)。

专注于使您的应用程序与众不同的东西,并尝试使其独立于GWT等。我可以推荐facade pattern - 将特定于应用程序的逻辑保留在一个并通过连接表示层来暴露它它对我们很有帮助。如果您的后端依赖于第三方基础架构(通过Web服务等),请使用adapter pattern将这些依赖项与您的代码分离。

在过去的5年里,我花了大部分的工作时间来建立与你在许多方面所描述的相匹配的东西。今天它更像是一个app框架,然后是一个应用程序 - 它有一些不同的浏览器界面(WAP /标准web + ajax / Facebook应用程序),双向SMS使用的界面,以及厚移动客户端的REST / XML界面 - BREW ,iPhone,Android和Blackberry。

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

使用多个不同的表示层框架(例如我们的Wicket和Restlet)并不是一个问题,只要该代码保持精简并且业务规则不受其限制(尽可能)。没有任何内容表明您的浏览器界面必须打包到与移动客户端界面相同的WAR中 - 使用Spring,您可以轻松地连接多个具有相同外观的Web应用程序。这对我们很有帮助,尤其是允许多个开发人员处理隔离良好的应用程序。

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