1

我正在开发一个包含相当复杂的输入模式的 Web 应用程序(Java EE 后端)。这种输入模式允许用户捕获数据,但它有一堆 (JavaScript) 限制,例如必填字段、只有在输入特定值时才可用的字段等。

我必须将此功能公开给外部系统,并允许他们将此数据提交给我的服务器。这些外部系统既可以基于 Web 也可​​以基于客户端(但我可以假设客户端可以访问 Internet)。我的第一个想法是通过服务为这些系统提供某种字段和诸如强制性的定义,并让它们呈现他们想要的输入模式。但是,这遇到了阻力,因为在接下来的几个月的开发过程中,字段类型和限制可能会发生很大变化。这些外部系统有不同的部署时间表,为此我们必须首先在所有系统中复制处理这些限制的所有逻辑,然后同步我们的部署。

已经提出的一种替代方法是让外部系统通过标准 HTTP 调用我的模式,并将其呈现在 iframe 或嵌入式呈现中。这解决了之前所有的抱怨,但它让我感到有点不安。

有没有我们没有想到的替代方案?也许某种 UI 模式与不同平台的现有渲染库?你对第二个提案有什么看法,有什么主要问题,还是这是“最好的”解决方案?

编辑:澄清一下,不管前端的决定如何,我当然仍会执行后端验证,因为我不能只信任传入的数据。

4

2 回答 2

0

您提到的约束(必填字段等)实际上与用户界面无关。您也说得对,让您的后端呈现 Web 内容不是一个好主意。

您的第一个建议听起来是个好主意,以下是我将如何解决您提到的问题:

  • 在后端进行所有验证并将模型对象发送到客户端,代表 UI 的当前状态(字段名称、类型、启用/禁用、错误消息等)。
  • 尽可能让客户保持沉默。它应该只负责在窗口/网页上渲染模型。每当更改字段并需要验证时,将模型提交到后端进行验证并取回要显示的新模型。(您可以通过仅返回更改的字段来优化它。)

这样做会将您的验证逻辑保留在一个地方(后端),并且客户端很少需要修改。

于 2012-07-12T10:39:17.103 回答
0

我在之前的几个项目中都遇到过同样的问题。基于这个经验,我可以诚实地说,服务器端验证是您可能必须实施的事情,以避免从客户端提交垃圾,无论它来自 GUI 还是通过 API 来自其他第三方系统。您可以选择一种可用的验证框架,我使用Apache Commons Validator并认为它很好,或者您可以实现自己的。另一方面,客户端预验证、自动完成和数据查找是让人类用户满意的解决方案。不要考虑代码重复,只需从业务角度使您的系统正确。

于 2012-07-12T15:49:55.463 回答