如何同步服务器端和客户端代码?

时间:2009-12-15 18:28:24

标签: javascript gwt client-server

我在软件工程中一直在学习(和教学)的东西是代码重复是所有邪恶的根源。另一方面,我发现很难解释这个概念应该如何应用于Web应用程序的开发。

请允许我澄清一下......输入&数据验证可以是Web应用程序的重要组成部分。有时这种验证可能非常复杂。例如,我在拼图编辑器上工作,验证包括检查操作或移动是否有效。然后必须检查非平凡的规则。

当然,验证必须在服务器端完成,以确保存储数据的一致性和质量。但是,必须对客户端进行验证,以确保顺畅的用户体验。

在大多数情况下,客户端和服务器端代码是用不同的语言编写的(即javascript / Python),因此验证代码必须编写两次。但是,根据我对GWT / Java(双方都是Java)的唯一体验,我发现可以重用大部分验证代码。这似乎使一切变得更容易:维护,重构,调试......

所以我的问题是:如何在客户端和服务器端语言不同的项目中管理与代码重复相关的问题?

3 个答案:

答案 0 :(得分:4)

我通常处理此问题的方法是在服务器端编写验证代码并通过Web方法公开它(在.NET中,大多数其他语言中存在类似的功能),以便可以从javascript调用它。因此,您可以从客户端同步和异步调用单个方法,也可以从服务器端调用。这并不适用于所有情况,但到目前为止它对我来说非常有用。

答案 1 :(得分:3)

通常,很难避免重复生成的代码,但常见的方法是使用代码生成器来构建服务器或客户端代码,这样您只需编写其中的一半代码。最流行的方法是编写服务器端公共,然后让代码生成器为您构建JavaScript代码。例如,我们在我公司使用的语言是Coldfusion,Form-o-matic为我们解决了这个问题。人们也可以通过编写可以在服务器端执行的JavaScript来从相反的方向解决问题。我会寻找一个能为你做到这一点的框架。

答案 2 :(得分:0)

一种可能的解决方案是使用DSL在验证描述文件(XML或任何其他方式)中抽象实际验证。这样,您只需要以客户端和服务器语言实现验证引擎,并将验证基于同一描述文件。