2012-07-12 76 views
1

我正在研究一个包含相当复杂的输入模式的Web应用程序(Java EE后端)。此输入模式允许用户捕获数据,但它有一堆(JavaScript)限制,例如必填字段,只有在输入特定值时才可用的字段等。设计:向外部系统公开用户界面行为

我必须将此功能公开外部系统并允许他们将这些数据提交给我的服务器。这些外部系统可以基于网络或客户端(但我可以假设客户端可以访问互联网)。我的第一个想法是通过服务提供对这些系统必需的领域和东西的某种定义,并让他们呈现输入模式,无论他们想要什么。尽管这种情况遭到了抵制,因为在未来几个月的发展过程中,领域和限制的类型可能会发生很大变化。这些外部系统具有不同的部署时间表,为此,我们必须首先复制所有系统中处理这些限制的所有逻辑,然后同步我们的部署。

已经提出的替代方案是让外部系统通过标准HTTP调用我的模态,并将其呈现在iframe或嵌入式呈现中。这解决了以前的所有投诉,但这让我感到有些不安。

有什么替代方案我们没有想到?也许某种UI模式与不同平台的现有渲染库?您对第二项提案有什么想法,是否有重大疑虑,或者这是“最佳”解决方案?

编辑:为了澄清,我当然仍然执行后端验证,无论前端决定,因为我不能信任传入的数据。

回答

0

您提到的限制(必填字段等)与用户界面无关。你也是对的,让你的后端渲染网页内容不是一个好主意。

你的第一个建议听起来是个好主意,这是我会怎么解决,你提到的问题:

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

这样做会使您的验证逻辑保持在一个位置(后端),而且客户端很少需要修改。

+0

感谢您的回复。尽管我同意你所说的话,但我相信主要的批评意见是:(a)有些东西不能局限于后端(比如字段类型,根据特定值选择字段, (b)基于其他值的一些字段的完成)和(b)与不提供服务器往返的提供即时反馈的方法相比,这种方法会更慢/更少用户关注。 – Zecrates 2012-07-12 11:40:06

+0

@Zecrates:“字段在选定的特定值上可用” - 这可以用我提出的模型解决,当选择一个值时,可以对后端服务进行回调(例如AJAX请求)并检索新的领域。你可以做同样的自动完成。 – casablanca 2012-07-12 12:31:27

0

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