设计:向外部系统公开用户界面行为

时间:2012-07-12 09:52:03

标签: integration

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

您提到的约束(必填字段等)实际上与用户界面无关。你的后端渲染网页内容也不是一个好主意。

你的第一个建议听起来不错,这就是我如何解决你提到的问题:

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

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

答案 1 :(得分:0)

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